Heim  >  Artikel  >  Java  >  Wie erlaube ich eine nicht kontinuierliche Zellenauswahl in einer JTable?

Wie erlaube ich eine nicht kontinuierliche Zellenauswahl in einer JTable?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-23 08:26:36662Durchsuche

How to Allow Non-Continuous Cell Selection in a JTable?

Ermöglichen der Auswahl einzelner und nicht kontinuierlicher JTable-Zellen

Verstehen der Anforderung

Die Aufgabe besteht darin, Benutzern die Auswahl mehrerer nicht zusammenhängender Zellen in zu ermöglichen eine JTable, die eine flexiblere Zellauswahl über Gruppen kontinuierlicher Zellen hinaus ermöglicht.

Erkunden Lösungen

1. Verwendung von ListSelectionModel

Mit der setSelectionModel()-Methode von JTable können Sie das Auswahlmodell anpassen. Indem Sie es auf ListSelectionModel.SINGLE_SELECTION setzen und einen Listener zur Verarbeitung von InputEvent.CTRL_MASK hinzufügen, können Sie eine nicht kontinuierliche Zellenauswahl implementieren.

2. Anpassen der MouseEvent-Verarbeitung

Durch Überschreiben der Methode „processMouseEvent()“ in der JTable können Sie die Modifikatoren des Ereignisses ändern, um anzuzeigen, dass die Steuertaste gedrückt wird. Auf diese Weise verhält sich die Tabelle so, als ob der Benutzer die Steuertaste gedrückt hält, wodurch die Auswahl mehrerer Zellen ermöglicht wird.

3. Implementieren eines benutzerdefinierten Listenauswahlmodells

Wenn die integrierten Auswahlmodelle Ihre Anforderungen nicht erfüllen, können Sie Ihre eigene ListSelectionModel-Implementierung erstellen, die die Zellenauswahl auf die gewünschte Weise verwaltet.

4. Beispielimplementierung

Der folgende Codeausschnitt stellt ein SSCCE bereit, das den benutzerdefinierten ProcessMouseEvent()-Ansatz zum Ermöglichen einer nicht kontinuierlichen Zellenauswahl in einer JTable demonstriert:

import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class TableSelection extends JFrame {

    public TableSelection() {
        JPanel main = new JPanel();

        // Initialize table data
        String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};
        Object[][] data = {
            {"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)},
            {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)},
            {"Sue", "Black", "Knitting", new Integer(2), new Boolean(false)},
            {"Jane", "White", "Speed reading", new Integer(20), new Boolean(true)},
            {"Joe", "Brown", "Pool", new Integer(10), new Boolean(false)}
        };

        // Override processMouseEvent to add control modifier
        JTable table = new JTable(data, columnNames) {
            @Override
            protected void processMouseEvent(MouseEvent e) {
                int modifiers = e.getModifiers() | InputEvent.CTRL_MASK;
                MouseEvent myME = new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), modifiers, e.getX(),
                        e.getY(), e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger(), e.getButton());
                super.processMouseEvent(myME);
            }
        };
        JScrollPane pane = new JScrollPane(table);
        main.add(pane);
        this.add(main);
    }

    public static void main(String[] args) {
        new TableSelection();
    }
}

Diese Implementierung ermöglicht Ihnen Um nicht zusammenhängende Zellen auszuwählen, halten Sie die Strg-Taste gedrückt, während Sie auf die gewünschten Zellen klicken.

Das obige ist der detaillierte Inhalt vonWie erlaube ich eine nicht kontinuierliche Zellenauswahl in einer JTable?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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