CardLayout を使用した JPanel の切り替え
Java でコンポーネント階層を操作する場合、共通のタスクは単一フレーム内で異なるグラフィカル パネル間を遷移することです。 。メニューとゲーム パネル間の切り替えという特定のケースでは、コンポーネントを動的に追加および削除しようとすることが一般的な誤解です。
パネル間を効果的に切り替えるには、この目的のために設計された CardLayout の利用を検討してください。仕組みは次のとおりです:
実装例:
メニュー パネルとゲーム パネルを切り替えるための CardLayout:
<code class="java">import java.awt.*; import java.awt.event.*; import javax.swing.*; public class GameFrame extends JFrame implements ActionListener { private JPanel mainPanel; private CardLayout cardLayout; private MenuPanel menuPanel; private GamePanel gamePanel; public GameFrame() { mainPanel = new JPanel(cardLayout = new CardLayout()); menuPanel = new MenuPanel(); gamePanel = new GamePanel(); mainPanel.add(menuPanel, "menu"); 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(); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { cardLayout.show(mainPanel, "game"); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new GameFrame()); } } 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 を使用すると、コンポーネントを削除したり再追加したりすることなく、パネル間をシームレスに切り替えることができます。これにより、コードが簡素化され、潜在的なパフォーマンスが回避されます。問題があります。
以上がCardLayout を使用して Java GUI の異なるパネル間を効率的に切り替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。