皆さん、こんばんは、
Java Swingに解決できない問題があります。おそらく、あなたが私を助けてくれるでしょう。ここにあります:
- BorderLayoutを使用するJFrameが1つと、多くのJPanelsがあります。
- 新しい画面を表示する必要があるたびに(つまり、メインメニューから、[検索]ボタンをクリックすると、[検索メニュー]に移動します)、中央にあるコンポーネント(JPanel)を削除して、新しい画面を表示します。 (新しいJPanel)代わりに中央に。
- このように、新しい画面を表示するたびにすべてのヘッダーオブジェクトとフッターオブジェクトを呼び出すわけではありません。
この小さな問題を除いて、このシステムではすべてが正常に機能します。新しいJPanelを作成するか、既存のJPanelに戻すたびに(一般的には、JPanelが表示されるたびに)いくつかのメソッドをトリガーしたいと思います。
そのために、ComponentListenerのcomponentShown(ComponentEvent e)メソッドを実装しようとし、JFrameの中央に配置したJPanelにComponentListenerを追加しましたが、機能しませんでした。この後、調査を行ったところ、このcomponentShown(@ComponentListener)メソッドは、JPanelの表示が変更された場合(非表示から表示またはその逆)にのみ機能することがわかりました。残念ながら、私はJPanelの表示を変更するのではなく、JPanelを別のJPanelに置き換えるだけです。つまり、現在のJPanelを削除し、新しいJPanelを追加します。以下のコードは、JPanelsを置き換える方法を示しています。
// Get the JPanel located in the center of our JFrame
JPanel currentView = (JPanel) myFrame.getContentPane().getComponent( 2 );
if ( currentView != null )
{
// Remove it from the JPanel
myFrame.getContentPane().remove( currentView );
}
// Add the new JPanel
myFrame.getContentPane().add( otherView, BorderLayout.CENTER );
// Pack the JFrame and show it
myFrame.pack();
これが私が持っているものです。手伝っていただければ幸いです。