Heim > Java > javaLernprogramm > Wie implementiert man verknüpfte Kontrollkästchen in einer JTable für die Auswahl mehrerer Zeilen?

Wie implementiert man verknüpfte Kontrollkästchen in einer JTable für die Auswahl mehrerer Zeilen?

DDD
Freigeben: 2024-12-05 19:43:11
Original
296 Leute haben es durchsucht

How to Implement Linked Checkboxes in a JTable for Multiple Row Selection?

Mehrere Zeilen auswählen und alle Kontrollkästchen aktivieren

In einer JTable, in der eine Spalte nicht bearbeitbaren Text enthält, während die andere Kontrollkästchen-Steuerelemente für boolesche Werte enthält, ist dies eine häufige Anforderung besteht darin, die Kontrollkästchen zu verknüpfen. Dies bedeutet, dass, wenn mehrere Zeilen ausgewählt sind und ein Kontrollkästchen deaktiviert ist, auch alle anderen ausgewählten Kontrollkästchen deaktiviert werden. Wenn ein Kontrollkästchen aktiviert ist, sollten entsprechend alle ausgewählten Kontrollkästchen folgen.

Implementieren der verknüpften Kontrollkästchen

Implementieren einer DataModel-Klasse:

  • Erweitern Sie die DefaultTableModel-Klasse, um ein benutzerdefiniertes DataModel mit Überschreibung zu erstellen Methoden:

    • getColumnClass(int columnsIndex): Gibt den Klassentyp für die Checkbox-Spalte (Boolean.class) zurück.
    • isCellEditable(int row, int Column): Nur Zellenbearbeitung zulassen in der Kontrollkästchenspalte.

Erstellen eines Control Panels mit Schaltflächen:

  • Fügen Sie ein Bedienfeld mit Schaltflächen zum Löschen oder Aktivieren aller ausgewählten Kontrollkästchen hinzu.

Erstellen einer SelectionAction-Klasse:

  • Implementieren Sie eine Aktionsklasse, um Schaltflächenereignisse zu verarbeiten.
  • Der Konstruktor akzeptiert ein boolescher Wert, der die gewünschte Aktion darstellt (Löschen oder Prüfen).
  • Die Methode „actionPerformed“ durchläuft ausgewählte Zeilen und aktualisiert die Kontrollkästchenwerte entsprechend.

Beispielcode:**

Der folgende Codeausschnitt demonstriert dies Implementierung:

import java.awt.*;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.DefaultListSelectionModel;
import javax.swing.table.DefaultTableModel;

public class MultipleRowSelection extends JPanel {

    private static final int CHECK_COL = 1;
    private static final Object[][] DATA = {
        {"One", Boolean.TRUE}, {"Two", Boolean.FALSE},
        {"Three", Boolean.TRUE}, {"Four", Boolean.FALSE},
        {"Five", Boolean.TRUE}, {"Six", Boolean.FALSE},
        {"Seven", Boolean.TRUE}, {"Eight", Boolean.FALSE},
        {"Nine", Boolean.TRUE}, {"Ten", Boolean.FALSE}};
    private static final String[] COLUMNS = {"Number", "CheckBox"};
    private DataModel dataModel = new DataModel(DATA, COLUMNS);
    private JTable table = new JTable(dataModel);
    private DefaultListSelectionModel selectionModel;

    public MultipleRowSelection() {
        super(new BorderLayout());
        this.add(new JScrollPane(table));
        this.add(new ControlPanel(), BorderLayout.SOUTH);
        table.setPreferredScrollableViewportSize(new Dimension(250, 175));
        selectionModel = (DefaultListSelectionModel) table.getSelectionModel();
    }

    private class DataModel extends DefaultTableModel {

        public DataModel(Object[][] data, Object[] columnNames) {
            super(data, columnNames);
        }

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            if (columnIndex == CHECK_COL) {
                return getValueAt(0, CHECK_COL).getClass();
            }
            return super.getColumnClass(columnIndex);
        }

        @Override
        public boolean isCellEditable(int row, int column) {
            return column == CHECK_COL;
        }
    }

    private class ControlPanel extends JPanel {

        public ControlPanel() {
            this.add(new JLabel("Selection:"));
            this.add(new JButton(new SelectionAction("Clear", false)));
            this.add(new JButton(new SelectionAction("Check", true)));
        }
    }

    private class SelectionAction extends AbstractAction {

        boolean value;

        public SelectionAction(String name, boolean value) {
            super(name);
            this.value = value;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < dataModel.getRowCount(); i++) {
                if (selectionModel.isSelectedIndex(i)) {
                    dataModel.setValueAt(value, i, CHECK_COL);
                }
            }
        }
    }

    private static void createAndShowUI() {
        JFrame frame = new JFrame("MultipleRowSelection");
        frame.add(new MultipleRowSelection());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                createAndShowUI();
            }
        });
    }
}
Nach dem Login kopieren

Fazit

Durch die Implementierung dieser Klassen und Aktions-Listener wird es möglich, mehrere Zeilen in einer JTable auszuwählen und die entsprechenden Kontrollkästchen gemeinsam zu aktivieren, wodurch die Benutzererfahrung verbessert und die Daten optimiert werden Manipulation.

Das obige ist der detaillierte Inhalt vonWie implementiert man verknüpfte Kontrollkästchen in einer JTable für die Auswahl mehrerer Zeilen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage