2

さて、現在、マルチウィンドウプログラムを作成しようとしています。

そして、他のフォーラムを見ると、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 に既にクラスが含まれている場合の条件を設定するので、言及する必要はありません)

4

1 に答える 1

1

次のようにして、フレーム全体を更新することができます

frame.revalidate();
frame.repaint();
于 2016-07-20T09:39:38.657 に答える