Rumah >Java >javaTutorial >Bagaimana untuk Menyegerakkan Pemilihan Butang Togol Antara JToolBar dan JMenu dalam Swing?

Bagaimana untuk Menyegerakkan Pemilihan Butang Togol Antara JToolBar dan JMenu dalam Swing?

Susan Sarandon
Susan Sarandonasal
2024-12-20 08:05:14900semak imbas

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

Ayun: Memautkan Butang Togol dengan Kumpulan Butang dan Item Menu

Dalam konteks aplikasi cat ringkas dengan butang bar alat dan item menu untuk bentuk yang berbeza, persoalan timbul: bagaimana untuk memastikan bahawa memilih butang bar alat menyahpilih yang lain dan memilih item menu yang sepadan, dan sebaliknya sebaliknya.

Walaupun kelas ButtonGroup boleh mengendalikan pemilihan dalam satu kumpulan butang, ia mungkin bukan penyelesaian yang paling sesuai untuk mengendalikan berbilang kumpulan. Tambahan pula, ia memperkenalkan risiko pengulangan tak terhingga jika menu mengubah suai butang, dan begitu juga sebaliknya.

Pendekatan yang lebih baik terletak pada penggunaan Tindakan. Antara muka Tindakan membenarkan berbilang komponen, seperti butang dan item menu, untuk melaksanakan fungsi yang sama. Dengan menggunakan Tindakan yang sama untuk setiap kumpulan, anda boleh memastikan tingkah laku yang konsisten tanpa memerlukan pengendalian manual pemilihan butang dan tetapan bentuk.

Untuk menggambarkan perkara ini, coretan kod berikut menunjukkan cara berkongsi Tindakan antara JMenu dan JToolBar untuk menguruskan fail terbaharu:

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;
        }
    }
}

Dengan menggunakan Tindakan yang sama untuk kedua-dua butang bar alat dan item menu, anda mencapai yang diingini tingkah laku apabila memilih butang menyahpilih yang lain dan memilih item menu yang sepadan, dan sebaliknya tanpa sebarang pengendalian manual atau risiko pengulangan yang tidak terhingga.

Atas ialah kandungan terperinci Bagaimana untuk Menyegerakkan Pemilihan Butang Togol Antara JToolBar dan JMenu dalam Swing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn