やや不明確な質問に対するお詫び-それを置くためのより良い方法を考えることができませんでした。
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がサイズ変更を終了したことをどのように検出できますか?私は2つのアプローチを考えました:
resizeFrame()メソッドをSwingUtilities.invokeLate(..)呼び出しに配置します。
タイマーのresizeFrame呼び出しを行うと、後続の呼び出しはタイマーが起動するまで何も実行されません。これにより、パネルのサイズを変更するのに十分な時間が与えられます。
前進するための最良の方法は何ですか?
また-これは、何年にもわたるサーバーサイドプログラムの後の私の最初の本格的なJavaGUIアプリです。StackOverflowは非常に役に立ちました。ほんとありがと!