在ChangeEvent上停止Swing组件重定位到初始坐标?

时间:2014-02-22 20:59:54

标签: java swing netbeans jfreechart jtabbedpane

我有一些可移动的对象(JLabel s),用户将在运行时在父ChartPanel内重新定位它们。要移动对象,我已经实现了(真正有用的)ComponentMover类,可在此处找到:http://tips4java.wordpress.com/2009/06/14/moving-windows/)。

移动时,它们的(x,y)坐标会显示给用户。我正在使用JTabbedPane并且每个标签显示两个对象的坐标(我试图发布截图但我缺乏声誉不允许)。

问题是当我更改标签时,对象会将自己重新定位到我最初设置的坐标。我认为这与revalidate()repaint()

有关

我尝试实施ChangeListener

public static final ChangeListener
    relocateObjects = new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent e) {
            labelPole.setAlignmentX(polePositionX);
            labelPole.setAlignmentY(polePositionY);
            labelZero.setAlignmentX(zeroPositionX);
            labelZero.setAlignmentY(zeroPositionY);
        }
    };
<{1}}

上的

JTabbedPane

将对象重新定位到事件之前存储的坐标,但无济于事。

我试图找到一种方法来阻止对象监听(并因此响应)状态更改或只是更新他们的默认位置来覆盖他们的初始坐标,你认为这将是一个选项,但我失败了。

我真的花了一整天时间,所以我想要一个解决方案或推动正确的方向。谢谢。

1 个答案:

答案 0 :(得分:2)

  

问题是当我更改标签时,对象会将自己重新定位到我最初设置的坐标。

您需要在包含要拖动的组件的面板上使用空布局:

panel.setLayout( null );