对这个有点不明确的问题道歉 – 想不出更好的方法.
我使用JXTaskPane(来自Swing labs扩展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非常有用.那谢谢啦!