我有一些可移动对象 (JLabel
),用户将在运行时在父 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);
}
};
在JTabbedPane
tabbedPane.addChangeListener(ComponentMover.relocateObjects);
将对象重新定位到事件发生之前存储的坐标,但无济于事。
我试图找到一种方法来防止对象监听(从而响应)状态更改,或者简单地更新它们的默认位置以覆盖它们的初始坐标,您认为这是一个选项,但我失败了。
我确实花了一整天的时间来解决这个问题,所以我希望有一个解决方案或朝着正确的方向插入。谢谢。
最佳答案
The problem is when I change tabs, the objects reposition themselves to the coordinates I had initially set them to.
您需要在包含您拖动的组件的面板上使用空布局:
panel.setLayout( null );
关于java - 停止 Swing 组件在发生 ChangeEvent 时重新定位到初始坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960486/