Maison >Java >javaDidacticiel >Comment puis-je synchroniser les boutons Swing et les éléments de menu pour une sélection exclusive ?

Comment puis-je synchroniser les boutons Swing et les éléments de menu pour une sélection exclusive ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-25 17:34:09487parcourir

How Can I Synchronize Swing Buttons and Menu Items for Exclusive Selection?

Regroupement des boutons Swing et des éléments de menu avec des groupes de boutons

Introduction :

Lors de la création d'applications Swing , il est courant de fournir à la fois des boutons de barre d'outils et des éléments de menu pour les interactions utilisateur. Cependant, il peut être difficile de maintenir une cohérence et une cohésion entre ces éléments, surtout lorsqu'ils remplissent des fonctions similaires.

Problème :

Un projet scolaire nécessite la création d'un application de peinture qui comprend des boutons de barre d'outils et des éléments de menu pour dessiner des lignes, des ovales et des rectangles. Le défi consiste à garantir que lorsqu'un utilisateur sélectionne un bouton de la barre d'outils, l'élément de menu correspondant est également sélectionné et vice versa, tout en désélectionnant simultanément tous les autres boutons et éléments de menu.

Solution :

Utilisation des ButtonGroups :

Les ButtonGroups peuvent être utilisés pour créer des liens AbstractButtons, vous permettant de créer des groupes exclusifs de boutons. Bien que les ButtonGroups puissent en effet gérer plusieurs groupes, ils ont des limites lorsqu'ils sont appliqués à des groupes parallèles.

Utilisation des actions :

Une approche alternative consiste à utiliser l'interface Action. Une action résume le concept de « commande » et encapsule toutes les opérations nécessaires pour exécuter cette commande. En attribuant la même action aux boutons de la barre d'outils et aux éléments de menu, vous pouvez partager le même code pour exécuter la commande.

Intégration du concepteur GUI Netbeans :

Dans Netbeans Concepteur d'interface graphique, vous pouvez définir l'action d'un composant en accédant à la fenêtre "Propriétés", en sélectionnant l'onglet "Action", puis en faisant glisser et en déposant l'action souhaitée depuis le Palette « Actions ».

Exemple de code :

L'extrait de code suivant montre comment créer une application graphique Netbeans simple qui utilise des actions pour lier les boutons de la barre d'outils et les éléments de menu :

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JToolBar;

public class ShapeSelector extends JFrame {

    private ButtonGroup toggleGroup = new ButtonGroup();

    public ShapeSelector() {
        super("Shape Selector");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Create the Action for shape selection
        Action shapeSelectAction = new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Perform shape selection based on Action command
            }
        };

        // Create a toolbar with toggle buttons
        JToolBar toolbar = new JToolBar();
        addButton("Line", toolbar, shapeSelectAction);
        addButton("Oval", toolbar, shapeSelectAction);
        addButton("Rectangle", toolbar, shapeSelectAction);

        // Create a menu with menu items
        JMenuBar menuBar = new JMenuBar();
        JMenu shapeMenu = new JMenu("Shape");
        menuBar.add(shapeMenu);
        addMenuItem("Line", shapeMenu, shapeSelectAction);
        addMenuItem("Oval", shapeMenu, shapeSelectAction);
        addMenuItem("Rectangle", shapeMenu, shapeSelectAction);

        // Add the components to the frame
        JPanel contentPane = new JPanel();
        contentPane.add(toolbar);
        setJMenuBar(menuBar);
        add(contentPane);

        pack();
        setVisible(true);
    }

    private void addButton(String text, JToolBar toolbar, Action action) {
        JButton button = new JButton(action);
        button.setText(text);
        toggleGroup.add(button);
        toolbar.add(button);
    }

    private void addMenuItem(String text, JMenu menu, Action action) {
        JMenuItem menuItem = new JMenuItem(action);
        menuItem.setText(text);
        menu.add(menuItem);
    }

    public static void main(String[] args) {
        new ShapeSelector();
    }
}

Dans ce code, l'action personnalisée shapeSelectAction est utilisée à la fois pour les boutons de la barre d'outils et les éléments de menu, garantissant que la sélection d'un désélectionne automatiquement les autres.

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