Maison  >  Article  >  Java  >  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
Susan Sarandonoriginal
2024-10-28 07:30:30676parcourir

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);
  1. Ajoutez les panneaux souhaités à le panneau principal, en identifiant chacun avec un nom unique :
mainPanel.add(menuPanel, "menu");
mainPanel.add(gamePanel, "game");
  1. Dans la logique du jeu, invoquez la méthode show() sur le CardLayout pour afficher le panneau souhaité :
cardLayout.show(mainPanel, "game");

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"));
        }
    }
}

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:
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