javaswing中的交互式组件

javaswing中的交互式组件,java,swing,Java,Swing,我需要在JavaSwing中实现一个映射,它与一个空间数据库连接以处理一些查询。我使用jLabel来表示地图图像 我需要拖动一个区域并返回该区域内所有可能的元素。每个返回元素应该在地图上显示为黄色三角形或红色圆圈,单击这些多边形可以提供其他地方的进一步信息 这是我的困惑。我应该使用哪个组件来演示图像上的元素? 它需要是交互式的,所以我选择了JButton,下面是我的实现: Iterator<JGeometry> it = al.iterator(); while (i

我需要在JavaSwing中实现一个映射,它与一个空间数据库连接以处理一些查询。我使用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);
    }
Iterator it=al.Iterator();
while(it.hasNext()){
JButton jButton1=新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位于同一级别,因此可能存在一些重叠。我该怎么处理呢?这个案子有没有更好的解决办法


考虑将这些元素绘制在侦听鼠标事件的计算机上。用户将单击并拖动,创建一个边界框,您可以确定是否有任何对象相交,并获取它们的坐标


这里有一个可以帮助您入门的方法。

显示了通过单击和拖动进行多项选择的一种方法。

这与您的问题没有直接关系,但代码中还有另一个问题会困扰您

您在循环中调用了两次
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);
    ...
}

您使用的是空布局管理器吗?