Heim > Java > javaLernprogramm > Wie synchronisiere ich die Auswahl der Umschalttasten zwischen JToolBar und JMenu in Swing?

Wie synchronisiere ich die Auswahl der Umschalttasten zwischen JToolBar und JMenu in Swing?

Susan Sarandon
Freigeben: 2024-12-20 08:05:14
Original
908 Leute haben es durchsucht

How to Synchronize Toggle Button Selection Between JToolBar and JMenu in Swing?

Swing: Umschalttasten mit einer Tastengruppe und Menüelementen verknüpfen

Im Kontext einer einfachen Farbanwendung mit Symbolleistenschaltflächen und Menüelementen Bei unterschiedlichen Formen stellt sich die Frage: Wie kann sichergestellt werden, dass beim Auswählen einer Symbolleistenschaltfläche die Auswahl der anderen aufgehoben und das entsprechende Menüelement ausgewählt wird, und umgekehrt? umgekehrt.

Während die ButtonGroup-Klasse die Auswahl innerhalb einer einzelnen Gruppe von Schaltflächen verarbeiten kann, ist sie möglicherweise nicht die am besten geeignete Lösung für die Verarbeitung mehrerer Gruppen. Darüber hinaus besteht das Risiko einer unendlichen Rekursion, wenn das Menü die Schaltfläche ändert, und umgekehrt.

Ein besserer Ansatz liegt in der Verwendung von Aktionen. Die Aktionsschnittstelle ermöglicht mehreren Komponenten, wie z. B. Schaltflächen und Menüelementen, die gleiche Funktion auszuführen. Durch die Verwendung derselben Aktion für jede Gruppe können Sie ein konsistentes Verhalten sicherstellen, ohne dass eine manuelle Bearbeitung der Schaltflächenauswahl und Formeinstellung erforderlich ist.

Um dies zu veranschaulichen, zeigt das folgende Codefragment, wie Aktionen zwischen einem JMenu und geteilt werden eine JToolBar zum Verwalten aktueller Dateien:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.io.File;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JToolBar;

public class FileMenu {

    public void create() {
        File userDir = new File(System.getProperty("user.dir"));
        File[] files = userDir.listFiles();

        JMenu menu = new JMenu("Recent Files");
        JToolBar toolBar = new JToolBar(JToolBar.VERTICAL);
        JLabel label = new JLabel(" ", JLabel.CENTER);
        for (File f : files) {
            if (f.isFile() && !f.isHidden()) {
                RecentFile rf = new RecentFile(f, label);
                menu.add(new JMenuItem(rf.getAction()));
                toolBar.add(rf.getAction());
            }
        }
        JMenuBar menuBar = new JMenuBar();
        menuBar.add(menu);

        JFrame f = new JFrame("FileMenu");
        f.setJMenuBar(menuBar);
        f.add(toolBar, BorderLayout.CENTER);
        f.add(label, BorderLayout.SOUTH);
        f.pack();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    class RecentFile extends AbstractAction {

        private final File file;
        private final JLabel label;

        public RecentFile(final File file, final JLabel label) {
            this.file = file;
            this.label = label;
            this.putValue(Action.NAME, file.getName());
            this.putValue(Action.SHORT_DESCRIPTION, file.getAbsolutePath());
        }

        public void actionPerformed(ActionEvent e) {
            label.setText(file.getName());

        }

        public Action getAction() {
            return this;
        }
    }
}
Nach dem Login kopieren

Durch die Verwendung derselben Aktion sowohl für die Symbolleistenschaltflächen als auch für die Menüelemente erreichen Sie das gewünschte Verhalten, bei dem die Auswahl einer Schaltfläche die Auswahl der anderen aufhebt und wählt den entsprechenden Menüpunkt aus und umgekehrt, ohne dass eine manuelle Bearbeitung oder das Risiko einer unendlichen Rekursion erforderlich ist.

Das obige ist der detaillierte Inhalt vonWie synchronisiere ich die Auswahl der Umschalttasten zwischen JToolBar und JMenu in Swing?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage