Heim > Java > javaLernprogramm > Hauptteil

Der Titel könnte lauten: Wie wechselt man mit CardLayout zwischen JPanels in einem JFrame?

Patricia Arquette
Freigeben: 2024-10-30 11:30:27
Original
692 Leute haben es durchsucht

The title could be: How to Switch Between JPanels in a JFrame Using CardLayout?

Wie kann ich zwischen JPanels innerhalb eines JFrame wechseln?

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>
Nach dem Login kopieren

Erklärung:

  • Wenn gameOn() aufgerufen wird, wird das MenuPanel nach hinten verschoben und als ausgeblendet gerendert, während das GamePanel nach vorne gebracht und angezeigt wird.

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!