Maison > Java > javaDidacticiel > le corps du texte

Le titre pourrait être : Comment basculer entre les JPanels dans un JFrame à l'aide de CardLayout ?

Patricia Arquette
Libérer: 2024-10-30 11:30:27
original
694 Les gens l'ont consulté

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

Comment puis-je effectuer une transition entre des JPanels au sein d'un JFrame ?

Question initiale :

Un débutant dans les composants Java demande de l'aide en basculant entre MenuPanel et GamePanel dans un JFrame. Le code actuel crée uniquement un JFrame vierge lors de l'appel de gameOn(), plutôt que de lancer le jeu. Les suggestions sont les bienvenues pour résoudre ce problème, en tenant compte de la présence d'un écouteur de souris dans MenuPanel.

Solution :

Au lieu d'utiliser l'approche de suppression et d'ajout de composants , il est conseillé d'utiliser un CardLayout. Cela permet une transition transparente entre les panneaux sans avoir besoin d'ajouts et de suppressions répétés.

Mise en œuvre du code :

<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>
Copier après la connexion

Explication :

  • Lorsque gameOn() est invoqué, le MenuPanel sera repoussé vers l'arrière et rendu masqué, tandis que le GamePanel sera amené au premier plan et affiché.

Exemple :

Pour une démonstration pratique, considérons le code suivant :

<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>
Copier après la connexion

Cette implémentation montre l'utilisation de CardLayout pour une transition en douceur entre MenuPanel et GamePanel au sein d'un JFrame .

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!