初始問題:
Java 組件初學者尋求幫助在 JFrame 內的 MenuPanel 和 GamePanel 之間切換。當前程式碼僅在呼叫 gameOn() 時建立一個空白 JFrame,而不是啟動遊戲。歡迎提出解決此問題的建議,考慮到 MenuPanel 中存在滑鼠偵聽器。
解決方案:
而不是採用刪除和添加組件的方法,建議使用 CardLayout。這樣可以實現面板之間的無縫過渡,無需重複添加和刪除。
程式碼實作:
<code class="java">CardLayout cardLayout = new CardLayout(); JPanel mainPanel = new JPanel(cardLayout); MenuPanel menu = new MenuPanel(); GamePanel game = new GamePanel(); mainPanel.add(menu, "menu"); mainPanel.add(game, "game"); ... public void gameOn() { cardLayout.show(mainPanel, "game"); }</code>
說明:
範例:
對於實際示範,請考慮以下程式碼:
<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; public class GameFrame extends JFrame implements ActionListener{ CardLayout cardLayout; JPanel mainPanel; MenuPanel menu; GamePanel game; public GameFrame() { cardLayout = new CardLayout(); mainPanel = new JPanel(cardLayout); menu = new MenuPanel(); game = new GamePanel(); mainPanel.add(menu, "menu"); mainPanel.add(game, "game"); JButton goGame = new JButton("Go TO Game"); goGame.addActionListener(this); add(mainPanel); add(goGame, BorderLayout.SOUTH); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setLocationByPlatform(true); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { gameOn(); } public void gameOn() { cardLayout.show(mainPanel, "game"); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable(){ @Override public void run() { GameFrame gameFrame = 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 在JFrame 內的MenuPanel 和GamePanel 之間平滑過渡.
以上是標題可以是:如何使用 CardLayout 在 JFrame 中的 JPanel 之間切換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!