【发布时间】:2010-02-26 10:48:20
【问题描述】:
对这个有点不清楚的问题表示歉意 - 想不出更好的表达方式。
我使用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 非常有帮助。所以谢谢!
【问题讨论】:
标签: java swing jxtaskpane