Heim >Java >javaLernprogramm >Der Titel könnte lauten: Wie wechselt man mit CardLayout zwischen JPanels in einem JFrame?
Anfangsfrage:
Ein Anfänger in Java-Komponenten sucht Hilfe beim Wechsel zwischen MenuPanel und GamePanel innerhalb eines JFrame. Der aktuelle Code erstellt beim Aufruf von gameOn() nur einen leeren JFrame, anstatt das Spiel zu starten. Wir freuen uns über Vorschläge zur Behebung dieses Problems unter Berücksichtigung der Anwesenheit eines Maus-Listeners in MenuPanel.
Lösung:
Anstatt den Ansatz des Entfernens und Hinzufügens von Komponenten zu verwenden , empfiehlt es sich, ein CardLayout zu verwenden. Dies ermöglicht den nahtlosen Übergang zwischen Panels, ohne dass wiederholtes Hinzufügen und Entfernen erforderlich ist.
Code-Implementierung:
<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>
Erklärung:
Beispiel:
Für eine praktische Demonstration betrachten Sie den folgenden 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>
Diese Implementierung zeigt die Verwendung von CardLayout für den reibungslosen Übergang zwischen MenuPanel und GamePanel innerhalb eines JFrame .
Das obige ist der detaillierte Inhalt vonDer Titel könnte lauten: Wie wechselt man mit CardLayout zwischen JPanels in einem JFrame?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!