Swing-Schaltflächen und Menüelemente mit ButtonGroups gruppieren
Einführung:
Beim Erstellen von Swing-Anwendungen ist es üblich, sowohl Symbolleistenschaltflächen als auch Menüelemente für Benutzerinteraktionen bereitzustellen. Es kann jedoch schwierig sein, die Konsistenz und den Zusammenhalt zwischen diesen Elementen aufrechtzuerhalten, insbesondere wenn sie ähnliche Funktionen erfüllen.
Problem:
Ein Schulprojekt erfordert die Erstellung eines Malanwendung, die Symbolleistenschaltflächen und Menüelemente zum Zeichnen von Linien, Ovalen und Rechtecken enthält. Die Herausforderung besteht darin, sicherzustellen, dass, wenn ein Benutzer eine Symbolleistenschaltfläche auswählt, auch das entsprechende Menüelement ausgewählt wird und umgekehrt, während gleichzeitig alle anderen Schaltflächen und Menüelemente deaktiviert werden.
Lösung:
Verwenden von ButtonGroups:
ButtonGroups können zum Verknüpfen verwendet werden AbstractButtons, mit dem Sie exklusive Gruppen von Schaltflächen erstellen können. Obwohl ButtonGroups tatsächlich mehrere Gruppen verarbeiten können, unterliegen sie bei der Anwendung auf parallele Gruppen Einschränkungen.
Aktionen verwenden:
Ein alternativer Ansatz ist die Verwendung der Aktionsschnittstelle. Eine Aktion abstrahiert das Konzept eines „Befehls“ und kapselt alle zur Ausführung dieses Befehls erforderlichen Vorgänge. Indem Sie beiden Symbolleistenschaltflächen und Menüelementen dieselbe Aktion zuweisen, können Sie denselben Code zum Ausführen des Befehls verwenden.
Netbeans GUI Designer-Integration:
Innerhalb der Netbeans Mit dem GUI-Designer können Sie die Aktion für eine Komponente festlegen, indem Sie zum Fenster „Eigenschaften“ navigieren, die Registerkarte „Aktion“ auswählen und die gewünschte Aktion per Drag & Drop aus dem Fenster ziehen Palette „Aktionen“.
Beispielcode:
Der folgende Codeausschnitt zeigt, wie eine einfache Netbeans-GUI-Anwendung erstellt wird, die Aktionen verwendet, um Symbolleistenschaltflächen und Menüelemente zu verknüpfen:
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(); } }
In diesem Code wird die benutzerdefinierte Aktion „shapeSelectAction“ sowohl für Symbolleistenschaltflächen als auch für Menüelemente verwendet, um die Auswahl sicherzustellen einer wählt die anderen automatisch ab.
Das obige ist der detaillierte Inhalt vonWie kann ich Swing-Tasten und Menüelemente zur exklusiven Auswahl synchronisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!