为这个有点不清楚的问题道歉 - 想不出更好的表达方式。
我使用JXTaskPane(来自 Swing 实验室扩展 API)来显示一些信息。
用户可以“单击”标题以展开面板。JXTaskPane 位于容器 JPanel 中,然后将其添加到 JFrame,即我的主应用程序窗口。
我希望我的应用程序窗口调整为展开的任务窗格的大小。为了实现这一点,我在容器 JPanel 中添加了一个组件侦听器,它将大小设置为现在展开的面板。
panel.addComponentListener(new ComponentListener()
{
public void componentResized(ComponentEvent e)
{
Dimension newSize = ((JXTaskPane)e.getSource()).getSize();
reSizeFrame(newSize);
}
}
private void reSizeFrame(Dimension newSize)
{
if ((newSize.height < maxSize.height) && (newSize.width < maxSize.width))
{
containerPanel.setSize(newSize);
appFrame.setSize(containerPanel.getSize());
appFrame.pack();
}
}
问题是componentResized方法在任务窗格展开时被调用,结果 resizeFrame 方法被调用了很多次,在屏幕上看起来真的很糟糕。
如何检测 JXTaskpane 何时完成调整大小?我想到了两种方法:
将 resizeFrame() 方法放入 SwingUtilities.invokeLate(..) 调用中。
放入计时器 resizeFrame 调用,因此任何后续调用在计时器触发之前都不会执行任何操作。这应该为面板调整大小提供足够的时间。
最好的前进方式是什么?
另外 - 这是我在多年的服务器端程序之后的第一个严肃的 Java GUI 应用程序。StackOverflow 非常有帮助。那谢谢啦!