ホームページ  >  記事  >  Java  >  CardLayoutを使用してJFrame内でJPanelを切り替える方法は?

CardLayoutを使用してJFrame内でJPanelを切り替える方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-28 06:29:30789ブラウズ

How to Switch JPanels within a JFrame using CardLayout?

JFrame 内での JPanel の切り替え

質問:
Java コンポーネントを初めて使用するため、問題が発生していますJFrame 内の JPanel を切り替えます。 gameOn()を呼び出すと、ゲームパネルが表示されずにフレーム表面が空白になります。これを修正するにはどうすればよいですか?

答え:

コンポーネントを追加および削除する代わりに、CardLayout を使用することをお勧めします。方法は次のとおりです:

  1. CardLayout オブジェクトとそれを使用した JPanel を作成します:

    <code class="java">CardLayout cardLayout = new CardLayout();
    JPanel mainPanel = new JPanel(cardLayout);</code>
  2. メニューとゲーム パネルを mainPanel に追加します:

    <code class="java">MenuPanel menu = new MenuPanel();
    GamePanel game = new GamePanel();
    mainPanel.add(menu, "menu");
    mainPanel.add(game, "game");</code>
  3. gameOn() メソッドでは、コンポーネントを追加または削除せずに、cardLayout を使用してゲーム パネルを表示します。

    <code class="java">public void gameOn() {
        cardLayout.show(mainPanel, "game");
    }</code>
  4. When gameOn( ) が呼び出されると、メニュー パネルがゲーム パネルの後ろに隠れます。

例:

<code class="java">import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

class GameFrame extends JFrame implements ActionListener {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new GameFrame().setVisible(true));
    }

    private CardLayout cardLayout;
    private JPanel mainPanel;
    private MenuPanel menuPanel;
    private GamePanel gamePanel;

    public GameFrame() {
        cardLayout = new CardLayout();
        mainPanel = new JPanel(cardLayout);

        menuPanel = new MenuPanel();
        mainPanel.add(menuPanel, "menu");

        gamePanel = new GamePanel();
        mainPanel.add(gamePanel, "game");

        JButton goGameButton = new JButton("Go to Game");
        goGameButton.addActionListener(this);

        add(mainPanel);
        add(goGameButton, BorderLayout.SOUTH);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        cardLayout.show(mainPanel, "game");
    }

}

class MenuPanel extends JPanel {

    public MenuPanel() {
        setBackground(Color.GREEN);
        add(new JLabel("Menu"));
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 300);
    }
}

class GamePanel extends JPanel {

    public GamePanel() {
        setBackground(Color.BLUE);
        add(new JLabel("Game"));
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 300);
    }
}</code>

以上がCardLayoutを使用してJFrame内でJPanelを切り替える方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。