Maison >Java >javaDidacticiel >Comment puis-je implémenter des boutons Précédent et Suivant dans une interface graphique Swing à l'aide de CardLayout ?

Comment puis-je implémenter des boutons Précédent et Suivant dans une interface graphique Swing à l'aide de CardLayout ?

DDD
DDDoriginal
2024-12-19 08:49:16742parcourir

How Can I Implement Back and Forward Buttons in a Swing GUI Using CardLayout?

Implémentation des boutons Précédent/Suivant dans Swing à l'aide de CardLayout

Problème :

Dans Swing, les utilisateurs recherchent un moyen pratique d'implémenter des boutons avant et arrière pour naviguer entre les différentes sections d'une interface graphique. Une tentative de mise en œuvre de cela à l'aide d'un système de pile n'a pas abouti et ils sont ouverts à des solutions alternatives.

Réponse :

Au lieu d'utiliser un système de pile , pensez à utiliser un CardLayout. Ce gestionnaire de mise en page vous permet de basculer entre différents panneaux avec une simple commande, ce qui le rend idéal pour créer un système de navigation avant/arrière.

Solution :

Le code suivant L'extrait montre comment implémenter les boutons avant et arrière à l'aide de CardLayout :

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.util.Random;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CardPanel extends JPanel {

    private static final Random random = new Random();
    private static final JPanel cards = new JPanel(new CardLayout());
    private final String name;

    public CardPanel(String name) {
        this.name = name;
        this.setPreferredSize(new Dimension(320, 240));
        this.setBackground(new Color(random.nextInt()));
        this.add(new JLabel(name));
    }

    @Override
    public String toString() {
        return name;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                create();
            }
        });
    }

    private static void create() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        for (int i = 1; i < 9; i++) {
            CardPanel p = new CardPanel("Panel " + String.valueOf(i));
            cards.add(p, p.toString());
        }
        JPanel control = new JPanel();
        control.add(new JButton(new AbstractAction("\u22b2Prev") {

            @Override
            public void actionPerformed(ActionEvent e) {
                CardLayout cl = (CardLayout) cards.getLayout();
                cl.previous(cards);
            }
        }));
        control.add(new JButton(new AbstractAction("Next\u22b3") {

            @Override
            public void actionPerformed(ActionEvent e) {
                CardLayout cl = (CardLayout) cards.getLayout();
                cl.next(cards);
            }
        }));
        f.add(cards, BorderLayout.CENTER);
        f.add(control, BorderLayout.SOUTH);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}

Cette solution améliorée offre une approche plus propre et plus flexible pour implémenter les boutons avant/arrière dans votre application Swing.

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