我有一些可移动的对象(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
将对象重新定位到事件之前存储的坐标,但无济于事。
我试图找到一种方法来阻止对象监听(并因此响应)状态更改或只是更新他们的默认位置来覆盖他们的初始坐标,你认为这将是一个选项,但我失败了。
我真的花了一整天时间,所以我想要一个解决方案或推动正确的方向。谢谢。
答案 0 :(得分:2)
问题是当我更改标签时,对象会将自己重新定位到我最初设置的坐标。
您需要在包含要拖动的组件的面板上使用空布局:
panel.setLayout( null );