さて、現在、マルチウィンドウプログラムを作成しようとしています。
そして、他のフォーラムを見ると、Java JFrame で を追加してコンテンツ ペインを更新しnew JComponent(new window/layout/idk)
、現在のウィンドウの可視性を false に設定し、新しいウィンドウの可視性を true に設定し、コンテンツ ペインを検証して再描画する必要があるようです。
contentPane.add(newWindowPanel);
currentWindowPanel.setVisible(false);
newWindowPanel.setVisible(true);
contentPane.validate();
contentPane.repaint();
今、私がやろうとしていること、そして部分的に行ったことはJPanel
、 を拡張するクラスを作成することです。このクラスは、作成しようとしている他の多くの JPanel クラスの階層の最上位になります。
そのクラス内には、次のメソッドがあります。
public void updateContentPane(Container contentPane, JPanel currentPanel, JPanel nextPanel){
contentPane.add(nextPanel);
currentPanel.setVisible(false);
nextPanel.setVisible(true);
contentPane.validate();
contentPane.repaint();
}
子クラスの 1 つでこのメソッドを呼び出すと、機能しません。
updateContentPane(WindowMain.contentPane, this, mainMenuClass);
各子クラスは、JPanel の特性を継承します。
「WindowMain」はJFrameを拡張したクラスで、「contentPane」はフレームのcontentPaneを保持する静的コンテナ変数です。
「this」は現在のクラス (JPane を継承) を表しますが、「this」は実際には機能しませんnew Object()
。
「mainMenuClass」も JPanel を継承し、このクラスですでにインスタンス化されています。
私の目標は、そのメソッドを呼び出して、あるシーンから別のシーンに単純にジャンプすることです。しかし、コード (デバッグ) を通過しますが、何も起こりません。しかし、メソッド内のコードを取得してボタン リスナー内に配置すると、問題なく動作します。
(このように書いて申し訳ありませんが、おそらく混乱を招く可能性がありますが、それでもこれを理解する必要があり、contentPane に既にクラスが含まれている場合の条件を設定するので、言及する必要はありません)