Swing windowStateChanged侦听器返回组件

时间:2016-11-30 22:54:39

标签: java swing jsplitpane windowlistener windowstate

我有一个带有JSplitPane的Swing应用程序,我希望在窗口最大化或恢复后立即获得JSplitPane的宽度。但我似乎无法获得正确的值,它总是返回JSplitPane的前一个宽度。窗口状态更改后的宽度不是。

我知道我必须使用evt.getNewState()进行NORMAL和MAXIMIZED_BOTH验证,但这并不重要。

addWindowStateListener(new java.awt.event.WindowStateListener() {
    public void windowStateChanged(java.awt.event.WindowEvent evt) {
       System.out.println(jsp.getWidth());
    }
});

如果已恢复,则打印出1812,如果最大化则打印1120。我还尝试了一些其他组件,最终得到了相同的结果。我怎样才能克服这个问题?

1 个答案:

答案 0 :(得分:1)

我使用addComponentListener()并为componentResized处理JFrame事件找到了我自己的解决方案。在这个事件中更新了所有子组件,因此我能够获得新的宽度并执行我的任务。仍然不完美,但足够接近。有关详情,请参阅How to Write a Component Listener