2011-03-30 131 views
2

我需要在Java Swing中实现映射,该映射与空间数据库连接以处理某些查询。我用jLabel来表示地图图像。Java Swing中的交互式组件

我需要拖动一个区域并返回该区域内所有可能的元素。每个返回元素应该在地图上显示为黄色三角形或红色圆圈,并且可以单击这些多边形以在其他位置提供更多信息。

这是我的困惑。我应该使用哪个组件来演示图像上的元素? 它必须是互动的所以我凭直觉选择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都在同一层次上,所以可能会有一些重叠。我该如何处理?这种情况有没有更好的解决方案?

expected performance

+1

您使用空布局管理器? – MeBigFatGuy 2011-03-30 05:35:15

回答

1

考虑具有这些元件上的JPanel绘制,其侦听鼠标事件。用户将点击并拖动,创建一个有界的框,您可以确定是否有任何对象相交,并获得它们的坐标。

这是demo,可以帮助您开始。

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); 
    ... 
} 
+0

谢谢boffinbraiN,这真的很有帮助 – ssb 2011-03-30 17:26:27