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.
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!