JFrame 内での JPanel の切り替え
問題:
プログラムで異なる JPanel を切り替えるにはどうすればよいですか? JFrame 内の JPanel、各パネルはメニューやゲーム インターフェイスなど、個別の目的を果たしますか?
解決策:
パネルを削除および追加する代わりに、 CardLayout は、コンテナ内の複数のパネルを管理する効率的な方法を提供します。実装方法は次のとおりです。
CardLayout cardLayout = new CardLayout(); JPanel mainPanel = new JPanel(cardLayout);
mainPanel.add(menuPanel, "menu"); mainPanel.add(gamePanel, "game");
cardLayout.show(mainPanel, "game");
CardLayout を使用する利点:
コード例:
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 サイトの他の関連記事を参照してください。