我需要在Java Swing中实现一个映射,它与空间数据库连接以处理一些查询。我使用jLabel来表示地图图像。
我需要拖动一个区域并返回该区域内的所有可能元素。每个返回元素应在地图上显示为黄色三角形或红色圆圈,并且可以单击这些多边形以提供有关其他位置的更多信息。
这是我的困惑。我应该使用哪个组件来演示图像上的元素?
它需要具有交互性才能直观地选择JButton
,这是我的实现:
Iterator<JGeometry> it = al.iterator();
while (it.hasNext()) {
JButton jButton1 = new JButton();
jButton1.setText("213");
jButton1.setBounds(325 + (int)it.next().getPoint()[0], 70 + (int)it.next().getPoint()[1], 30,30);
jButton1.setVisible(true);
getContentPane().add(jButton1);
}
但它没有在面板上显示任何按钮。我认为包含图像的jButton和jLabel都处于同一级别,因此可能存在一些重叠。我该怎么处理?对于这种情况有没有更好的解决方案?
答案 0 :(得分:2)
答案 1 :(得分:1)
GraphPanel
显示了一种通过点击和拖动进行多项选择的方法。
答案 2 :(得分:1)
这与您的问题没有直接关系,但您的代码中还有另一个问题会给您带来麻烦。
你在循环中调用it.next()
两次。每次调用next()
都会将迭代器移动一个元素,因此您获得的第一个对象将与第二个对象不同。因此,您的结果不仅会出错,而且如果al
中的元素数量为奇数(因为您一次取两个元素),您最终会遇到异常。相反,您应该只调用next()
一次并将值赋给局部变量,或者使用Java 6 for循环语法:
for(JGeometry geom : al) {
...
jButton1.setBounds(325 + (int)geom.getPoint()[0], 70 + (int)geom.getPoint()[1], 30, 30);
...
}