Maison > Java > javaDidacticiel > Comment basculer efficacement entre les JPanels dans un JFrame à l'aide de CardLayout ?

Comment basculer efficacement entre les JPanels dans un JFrame à l'aide de CardLayout ?

Susan Sarandon
Libérer: 2024-10-28 07:30:30
original
850 Les gens l'ont consulté

How to Efficiently Switch Between JPanels in a JFrame Using CardLayout?

Changement de JPanels dans un JFrame

Problème :

Comment puis-je basculer par programme entre différents JPanels dans un JFrame, où chaque panneau remplit un objectif distinct, comme un menu ou une interface de jeu ?

Solution :

Au lieu de supprimer et d'ajouter des panneaux, utilisez un CardLayout, qui fournit un moyen efficace de gérer plusieurs panneaux dans un conteneur. Voici comment l'implémenter :

  1. Créez un objet CardLayout et attribuez-le à un JPanel comme gestionnaire de mise en page :
CardLayout cardLayout = new CardLayout();
JPanel mainPanel = new JPanel(cardLayout);
Copier après la connexion
  1. Ajoutez les panneaux souhaités à le panneau principal, en identifiant chacun avec un nom unique :
mainPanel.add(menuPanel, "menu");
mainPanel.add(gamePanel, "game");
Copier après la connexion
  1. Dans la logique du jeu, invoquez la méthode show() sur le CardLayout pour afficher le panneau souhaité :
cardLayout.show(mainPanel, "game");
Copier après la connexion

Avantages de l'utilisation de CardLayout :

  1. Basculez facilement entre les panneaux sans avoir besoin d'opérations complexes d'ajout/suppression.
  2. Simplifiez le code structurez et réduisez le risque d'erreurs d'exécution.
  3. Gérez efficacement plusieurs panneaux dans un seul conteneur.

Exemple de code :

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 {

    CardLayout cardLayout; // CardLayout for managing panels
    JPanel mainPanel; // Main panel to hold the different JPanels

    public GameFrame() {
        cardLayout = new CardLayout();
        mainPanel = new JPanel(cardLayout);

        MenuPanel menuPanel = new MenuPanel(); // Menu panel
        GamePanel gamePanel = new GamePanel(); // Game panel

        mainPanel.add(menuPanel, "menu"); // Add menu panel with "menu" identifier
        mainPanel.add(gamePanel, "game"); // Add game panel with "game" identifier

        JButton startGameButton = new JButton("Start Game");
        startGameButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                cardLayout.show(mainPanel, "game"); // Show game panel when button is clicked
            }
        });

        add(mainPanel); // Add main panel to the JFrame
        add(startGameButton, BorderLayout.SOUTH); // Add the start game button below the main panel

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(new Dimension(600, 400));
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new GameFrame());
    }

    class MenuPanel extends JPanel { // Menu panel with menu text

        MenuPanel() {
            setBackground(Color.GREEN);
            add(new JLabel("Menu"));
        }
    }

    class GamePanel extends JPanel { // Game panel with game text

        GamePanel() {
            setBackground(Color.BLUE);
            add(new JLabel("Game"));
        }
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal