0

これまでのところ、メインメニュークラスとゲーム用のクラスを持つ Java のビデオゲームに取り組んでいます。私が今セットアップしたように、各クラスは独自の JFrame を使用します。つまり、ユーザーが「ゲームの開始」をクリックすると、メイン メニューの JFrame が閉じ、ゲームの JFrame が開きます。明らかにこれは理想的ではなく、両方のクラスで同じ JFrame を使用したいと考えていますが、どうすればよいかわかりませんし、インターネット検索も役に立ちませんでした。

私のメインメニューのクラスは次のとおりです。

public class Frame extends javax.swing.JFrame { ... }

Game クラスが Frame クラスをインポートするように設定しましたが、ゲームから JFrame 表示要素を作成しようとしても何も表示されません。だから私の質問は:

複数のクラスで単一の JFrame を使用するにはどうすればよいですか?

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

4

4 に答える 4

1

メイン フレームの参照を各子パネルに渡す必要があるのではなく、(例として) アクセスしたくないプログラムの部分を公開する可能性があるため、CardLayoutのようなものを使用して使用する必要があります。メイン フレームをメイン ディスプレイ ハブとして使用し、必要に応じてパネルを切り替えます。

その他の例については、CardLayout の使用方法をご覧ください。

于 2013-02-08T20:59:46.273 に答える
0

cardLayout を使用してパネルを切り替えます http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html

于 2013-02-08T20:59:24.583 に答える
0

各クラスを独自のフレームにするのではなく、1 つのフレームを複数のクラスで操作することができます。私はおそらく次のように設定します:

public class MainFrame extends JFrame {
    public MainFrame() {
        super("Cool Game!");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

public class Game {
    private final MainFrame mainFrame;

    public Game(final MainFrame mainFrame) {
        this.mainFrame = mainFrame;
        mainFrame.setContentPane(createGamePanel());
    }

    private JPanel createGamePanel() {
        //...
    }
}

public class MainMenu {
    private final MainFrame mainFrame;

    public MainMenu(final MainFrame mainFrame) {
        this.mainFrame = mainFrame;
    }

    public void showMainMenu() {
        mainFrame.setContentPane(createMainMenuPanel());
    }

    private JPanel createMainMenuPanel() {
        //...
    }
}
于 2013-02-08T20:49:57.143 に答える
0

ゲーム全体で 1 フレームだけ使用する必要があります。また、コンテンツごとに多くの JPanel があるはずです。

コンテンツの決定と切り替えは次のようになります。

switch( currentState )  {

   case introduction: 
        setContentPane(new IntroductionPanel());
        break;
    case insideGame:
        setContentPane( new GamePanel() );
    ...
    ...
    ...

}
于 2013-02-08T20:56:43.630 に答える