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!