使用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>透過使用CardLout ,您可以在面板之間無縫切換,無需刪除和重新添加組件,從而簡化了程式碼並避免了潛在的效能問題問題。
以上是如何使用 CardLayout 在 Java GUI 中的不同面板之間高效切換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!