1

より高いレベルのクラスJPanelのいずれかでレンダリングできる「ジェネリック」を作成したい( 、、またはある程度正確に)。WindowJFrameJDialogJInternalFrame

そのウィンドウが画面にレンダリングされなくなったときに、いくつかの静的な値を「クリーンアップ」できるようにしたいと考えています。通常、これはWindowクラス ( などJFrame) を使用してaddWindowListener行いwindowClosing、.windowClosedJFrame

どのWindowクラスでもこれをレンダリングできるようにしたいので、追加するリスナーの種類も、追加するウィンドウもわかりません。

JPanelどのWindowクラスがそれをレンダリングするかに関係なく、シャットダウンフックを追加できるように、to の実現とレンダリングを「フック」する方法はありますか?

(私は見ましPropertyChangeListenerたが、レンダリングcomponentShownでトリガーしません。)JPanel

どんな助けでも大歓迎です。

4

2 に答える 2

2

さて、ようやく何かが機能しましたが、答えが本当に好きかどうかはわかりません。

作成時に を追加しましAncestorListenerJPanel。このリスナーはancestorRemovedandancestorMovedイベントをスタブ化し、イベント内で適切な/ancestorAddedをフックして、ウィンドウが閉じたときにシャットダウン コードを実行できるようにします。getTopLevelAncestor()WindowListenerInternalFrameListener

より良い方法があれば、私はそれを受け入れます。HierarchyListener( Geoff からレビューします。)

于 2010-01-27T16:05:00.397 に答える
0

必要なセマンティクスに応じて、いくつかの異なるオプションがあります。を登録して、メソッドComponentListenerを処理できます。componentHiddenもう1つの可能性は、を登録してイベントHierarchyListenerをチェックすることです。DISPLAYABILITY_CHANGEDまた、を使用しHierarchyListenerて、パネルがコンテナに追加またはコンテナから削除されたことを確認し、古いウィンドウと新しいウィンドウからウィンドウリスナーを追加/削除することもできます。ComponentListenerとの違いはHierarchyListener、パネルのウィンドウが配置されたときに/イベントがトリガーComponentListenerされるのに対し、は可視性の変更によってトリガーされることです。おそらく最善の策ですが、将来、パネルが再び表示されるように設定される可能性があることに注意してください。HierarchyListenerDISPLAYABILITY_CHANGEDComponentListener

AncestorListener ancestorRemovedイベントを試すこともできます。コンポーネント自体またはその祖先のいずれかが不可視にされた場合に呼び出されます。

于 2010-01-27T15:56:11.167 に答える