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调用2次
该类不是直接从JMapViewer派生的。通过鼠标单击,我得到了两个坐标[lat,lon],它们将用于绘制由P1,P2给出的一条线,其中P1=[lat,lon],P2=[lat+10,lon+10]。
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);
您正在将“地图”添加到面板中。因此,您需要重写JMapViewer
类的PaintComponent()
方法。
无论何时重写类的方法,都应使用:
@Override
protected void paintComponent(Graphics g)
...
然后,如果错误地重写了一个方法,您将得到一个编译错误。
在我的Java应用程序中,我使用的是JMapViewer;地图绘制在JPanel上。是否可能获得与当前缩放级别相对应的地图比例尺?该地图基于著名的墨卡托投影: 投影是共形的,因此局部线性尺度与方向无关。我的想法使用了两个相同的平行点: 改进:初始点p1可以是视图的中心。 像素坐标“以米为单位”进行评估;公式缺少像素大小...
问题内容: 我是mongodb的新手。我可以知道如何避免重复输入。在关系表中,我们使用主键来避免它。我可以知道如何使用Java在Mongodb中指定它吗? 问题答案: 在选项中使用索引。 您也可以跨多个字段执行此操作。 有关 更多详细信息和示例, 请参阅 文档中的 此部分 。 MongoDB索引可以有选择地施加一个 唯一的键约束 ,以确保不会插入任何索引键值与现有文档值匹配的文档。 如果希望从唯一
问题内容: 我正在尝试在两个数据帧之间合并。每个数据帧都有两个索引级别(日期,客户)。在列中,例如,某些列在两者之间匹配(货币,日期)。 按索引合并这些内容的最佳方法是什么,但不要采用两个副本的货币和日期。 每个数据框都是90列,所以我试图避免用手将所有内容写出来。 如果我做: 我懂了 谢谢!… 问题答案: 您可以算出仅在一个DataFrame中的列,并使用它来选择合并中列的子集。 然后执行合并(
我使用for循环将学生详细信息添加到ArrayList。当我给第二个学生提供详细信息时,它会覆盖第一个数据。螺柱类 将数据添加到ArrayList的主类。 输出:第二个数据[2,2]后的实际输出辊数[1]。预期输出应为卷号: A1姓名: F1 L1性别:男性年龄: 11体育赛事:标枪 报名号:A2姓名:F2 L2性别:女年龄:14体育项目:100米跑 报名号:A3姓名:F3 L3性别:男性年龄:1
问题内容: 结果是 在哪里重复,因此哈希函数无法按预期工作。我将如何覆盖String数组的Hash方法。或就此而言,通用数组?有没有更好的方法来完成我要做的事情? 问题答案: 你不能 数组使用默认的基于身份的Object.hashCode()实现,无法覆盖它。不要在HashMap / HashSet中将数组用作键! 请改用一组列表。
我有一个包含许多JSON文件的文件夹,我希望使用JMeter将它们并行发送到Webservice。 我已经使用BeanShell采样器将文件收集到JMeter-variables中。然后我使用了一个ForEach控制器来执行HTTP请求(参见此线程)。 但问题是,当使用线程计数>1时,JSON文件会被多次处理。每个线程循环访问自己的JSON文件列表。 您知道多个线程如何共享ForEach控制器的输