Maison > Java > javaDidacticiel > le corps du texte

Comment basculer efficacement entre différents panneaux dans une interface graphique Java à l'aide d'un CardLayout ?

Susan Sarandon
Libérer: 2024-10-28 04:54:30
original
485 Les gens l'ont consulté

How do I efficiently switch between different panels in a Java GUI using a CardLayout?

Changer de JPanels avec un CardLayout

Lorsque vous travaillez avec des hiérarchies de composants en Java, une tâche courante consiste à faire la transition entre différents panneaux graphiques dans un seul cadre . Dans le cas spécifique du basculement entre un menu et un panneau de jeu, une idée fausse courante consiste à tenter d'ajouter et de supprimer des composants de manière dynamique.

Pour basculer efficacement entre les panneaux, envisagez d'utiliser un CardLayout, conçu à cet effet. Voici comment cela fonctionne :

  1. Créer un CardLayout : Instancier un objet CardLayout, qui gérera les transitions entre les panneaux.
  2. Créer un panneau principal : Créez un JPanel pour servir de conteneur à vos panneaux et définissez son gestionnaire de mise en page sur CardLayout.
  3. Ajoutez des panneaux au panneau principal : Ajoutez le MenuPanel et le GamePanel au panneau principal, en leur attribuant des noms uniques (par exemple, "menu" et "jeu") dans la méthode add().
  4. Déclenchez les transitions : Plus tard dans votre code, lorsque vous devez changer panneaux, appelez simplement la méthode cardLayout.show(mainPanel, "desiredPanelName"). Cela poussera le panneau actuel vers l'arrière et amènera le panneau souhaité vers l'avant.

Exemple d'implémentation :

Considérez l'exemple de code suivant qui utilise un CardLayout pour basculer entre un panneau de menu et un panneau de jeu :

<code class="java">import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GameFrame extends JFrame implements ActionListener {

    private JPanel mainPanel;
    private CardLayout cardLayout;
    private MenuPanel menuPanel;
    private GamePanel gamePanel;

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

        menuPanel = new MenuPanel();
        gamePanel = new GamePanel();

        mainPanel.add(menuPanel, "menu");
        mainPanel.add(gamePanel, "game");

        JButton goGameButton = new JButton("Go to Game");
        goGameButton.addActionListener(this);

        add(mainPanel);
        add(goGameButton, BorderLayout.SOUTH);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        cardLayout.show(mainPanel, "game");
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> 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>
Copier après la connexion

En utilisant un CardLayout, vous pouvez basculer de manière transparente entre les panneaux sans avoir besoin de supprimer et de rajouter des composants, ce qui simplifie le code et évite les performances potentielles. problèmes.

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!

source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!