gpt4 book ai didi

java - JMapViewer,绘制到OSM并避免两次调用MouseClick事件

转载 作者:行者123 更新时间:2023-12-01 21:18:18 27 4
gpt4 key购买 nike

假设 Map3 是以下类:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.JPanel;
import org.openstreetmap.gui.jmapviewer.Coordinate;
import org.openstreetmap.gui.jmapviewer.DefaultMapController;
import org.openstreetmap.gui.jmapviewer.JMapViewer;
import org.openstreetmap.gui.jmapviewer.MapPolygonImpl;


public class Map3 {

private JPanel p;
private JMapViewer map;
private double lat, lon;

public Map3()
{
p = new JPanel();
map = new JMapViewer();
p.setLayout(new BorderLayout());

new DefaultMapController(map) {
@Override
public void mouseClicked(MouseEvent e) {
Point p = e.getPoint();
lat = map.getPosition(p).getLat();
lon = map.getPosition(p).getLon();
}
//Where to locate the method ????
protected void paintComponent(Graphics g){

Coordinate c1= new Coordinate(lat,lon),c2= new Coordinate(lat+10,lon+10); //Draw the line

List<Coordinate> route = new ArrayList<Coordinate>(Arrays.asList(c1, c2, c1));
map.addMapPolygon(new MapPolygonImpl(route));
}
};

p.add(map);
p.setVisible(true);
}


public JPanel getJPanel() {return p;}
}

为了避免鼠标监听器的双重调用,请参阅问题

JMapViewer, MouseListener called 2 times

该类不是直接从 JMapViewer 派生的。使用鼠标单击,我得到两个坐标 [lat, lon],将用于绘制由 P1、P2 给出的线,其中 P1=[lat, lon]、P2=[lat+10, lon+10]。

我不确定 PaintComponent() 方法应该放在哪里才能向 OSM map 添加一些绘图。

public class TEST
{
public static void main (String [] args)
{
JFrame jf = new JFrame();
jf.setSize(800, 600);
Map3 p = new Map3();
jf.add(p.getJPanel());
jf.setVisible(true);
}
}

当前版本不能很好地工作,paintComponent()没有被调用...

感谢您的帮助。

最佳答案

p.add(map);

您正在将“ map ”添加到面板中。因此,您需要重写 JMapViewwer 类的 paintComponent() 方法。

每当你重写类的方法时,你应该使用:

@Override
protected void paintComponent(Graphics g)
...

如果你错误地重写了一个方法,你将会得到一个编译错误。

但是,在您的情况下,您甚至不应该重写 PaintComponent() 方法。该方法仅适用于绘画。它不适用于添加新的多边形对象。也许代码应该在 mousePressed() 逻辑中?

关于java - JMapViewer,绘制到OSM并避免两次调用MouseClick事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39548802/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com