0

次を使用して、swing アプリで画像を表示できます。

double longitude = 10;
double lat = 20

次に、画像を印刷します。

JFrame frame = new JFrame();
frame.add(mapImage);

私は今それを変更しました:

public Image map() {
URL map = new URL("http://maps.google.com/staticmap?center="+long+","+longitude +"&zoom=14&size=500x500");
Image map = ImageIO.read((map));
return map;
}

JFrame frame = new JFrame();
frame.add(map);

次に、map(); を呼び出してマップを更新しようとしています。その後、再描画(); ただし、まだ機能していません =[

4

2 に答える 2

2

私はあなたがこのようなものを持っていると推測しなければなりません:

longitude = newLongitude;
lat = newLatitude;
// here
repaint();

と は変わらないので、これは何の効果もmapありmapImageません。// hereコメントを入れた場所に次のコードを挿入してみてください。

map = new URL("http://maps.google.com/staticmap?center="+longitude+","+lat +"&zoom=14&size=500x500");
mapImage = ImageIO.read(map);
于 2012-11-25T00:34:19.037 に答える
2

色々遊んだけど特に問題なさそう…

フライ・ミー・トゥー・ザ・ムーン

(ズームレベルを変更したので、常に「青」だけになることはありませんでした)

public class TestGoogleMaps {

    public static void main(String[] args) {
        new TestGoogleMaps();
    }

    public TestGoogleMaps() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                final MapPane mapPane = new MapPane();
                JButton random = new JButton("Random");
                random.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        String lat = Double.toString((Math.random() * 180) - 90);
                        String longt = Double.toString((Math.random() * 360) - 180);
                        new LoadMapTask((JButton)e.getSource(), mapPane, lat, longt).execute();
                        ((JButton)e.getSource()).setEnabled(false);
                    }
                });

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(mapPane);
                frame.add(random, BorderLayout.SOUTH);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });
    }

    public class MapPane extends JPanel {

        private BufferedImage mapImage;
        private String latitude;
        private String longitude;

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(500, 500);
        }

        public void setMap(String lat, String log, BufferedImage image) {
            mapImage = image;
            latitude = lat;
            longitude = log;
            repaint();
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (mapImage != null) {
                int x = (getWidth() - mapImage.getWidth()) / 2;
                int y = (getHeight() - mapImage.getHeight()) / 2;
                g.drawImage(mapImage, x, y, this);
                FontMetrics fm = g.getFontMetrics();
                g.drawString(latitude + "x" + longitude, 0, fm.getAscent());
            }
        }

    }

    public class LoadMapTask extends SwingWorker<BufferedImage, Object> {

        private String latitude;
        private String longitude;
        private MapPane mapPane;
        private JButton master;

        public LoadMapTask(JButton master, MapPane mapPane, String latitude, String lonitude) {
            this.mapPane = mapPane;
            this.latitude = latitude;
            this.longitude = lonitude;
            this.master = master;
        }

        @Override
        protected BufferedImage doInBackground() throws Exception {
            BufferedImage mapImage = null;
            try {
                URL map = new URL("http://maps.google.com/staticmap?center=" + latitude + "," + longitude + "&zoom=5&size=500x500");
                System.out.println(map);
                mapImage = ImageIO.read(map);
            } catch (Exception exp) {
                exp.printStackTrace();
            }
            return mapImage;
        }

        @Override
        protected void done() {
            try {
                mapPane.setMap(latitude, longitude, get());
            } catch (InterruptedException | ExecutionException ex) {
                ex.printStackTrace();
            }
            master.setEnabled(true);
        }

    }

}
于 2012-11-25T06:22:30.923 に答える