ホームページ  >  記事  >  Java  >  CardLayout を使用して JFrame 内の JPanel を効率的に切り替えるにはどうすればよいですか?

CardLayout を使用して JFrame 内の JPanel を効率的に切り替えるにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-28 07:30:30676ブラウズ

How to Efficiently Switch Between JPanels in a JFrame Using CardLayout?

JFrame 内での JPanel の切り替え

問題:

プログラムで異なる JPanel を切り替えるにはどうすればよいですか? JFrame 内の JPanel、各パネルはメニューやゲーム インターフェイスなど、個別の目的を果たしますか?

解決策:

パネルを削除および追加する代わりに、 CardLayout は、コンテナ内の複数のパネルを管理する効率的な方法を提供します。実装方法は次のとおりです。

  1. CardLayout オブジェクトを作成し、レイアウト マネージャーとして JPanel に割り当てます。
CardLayout cardLayout = new CardLayout();
JPanel mainPanel = new JPanel(cardLayout);
  1. 目的のパネルを追加します。メイン パネル。それぞれを一意の名前で識別します:
mainPanel.add(menuPanel, "menu");
mainPanel.add(gamePanel, "game");
  1. ゲーム ロジックで、CardLayout で show() メソッドを呼び出して、目的のパネルを表示します:
cardLayout.show(mainPanel, "game");

CardLayout を使用する利点:

  1. 複雑な追加/削除操作を必要とせずに、パネル間を簡単に切り替えることができます。
  2. コードを簡素化します。
  3. 単一のコンテナ内で複数のパネルを効率的に管理します。

コード例:

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;

public class GameFrame extends JFrame {

    CardLayout cardLayout; // CardLayout for managing panels
    JPanel mainPanel; // Main panel to hold the different JPanels

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

        MenuPanel menuPanel = new MenuPanel(); // Menu panel
        GamePanel gamePanel = new GamePanel(); // Game panel

        mainPanel.add(menuPanel, "menu"); // Add menu panel with "menu" identifier
        mainPanel.add(gamePanel, "game"); // Add game panel with "game" identifier

        JButton startGameButton = new JButton("Start Game");
        startGameButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                cardLayout.show(mainPanel, "game"); // Show game panel when button is clicked
            }
        });

        add(mainPanel); // Add main panel to the JFrame
        add(startGameButton, BorderLayout.SOUTH); // Add the start game button below the main panel

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(new Dimension(600, 400));
        setVisible(true);
    }

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

    class MenuPanel extends JPanel { // Menu panel with menu text

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

    class GamePanel extends JPanel { // Game panel with game text

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

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

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