java - 停止 Swing 组件在发生 ChangeEvent 时重新定位到初始坐标?

标签 java swing netbeans jfreechart jtabbedpane

我有一些可移动对象 (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/

相关文章:

java - 使用Scanner读取文本文件并存储到ArrayList

java - prepareStatement.executeUpdate(sql) 给出错误

java - 代码执行时项目没有响应

Java JLabel 数组在使用后删除元素

java - 用于外部属性的 Spring ConditionalOnProperty

java - 将参数传递给 doGet() servlet

java - 编辑 JTable 时行为不一致

java - 如何在java swing中使用进度条,当该功能在繁重的进程中工作时

java - 有没有办法在eclipse中运行netbeans开发的java程序?

java - 如何在树中找到选定的节点?