Herstellung einer JTable Zelle editierbar - aber *nicht* durch einen Doppelklick
Ich versuche zum hinzufügen einer Spalte zu einer JTable
mit dem folgenden Verhalten (ähnlich wie Windows-Explorer und ähnlichen Schalen):
- Die Zelle kann angeklickt werden, um es auszuwählen, wie üblich.
- Kann die Zelle doppelt geklickt haben, führen Sie eine separate Aktion (starten eines externen Programms.)
- Der Wert der Zelle (string) können noch bearbeitet werden, durch einfaches klicken ein zweites mal (nach einer pause) oder durch drücken von F2, wenn die Zelle markiert ist.
Doppelklick muss nicht trigger Bearbeiten der Zelle, aber ich möchte lassen Sie alle anderen Standardeinstellungen Bearbeiten von Triggern operativen, wenn möglich.
Ich habe versucht, das hinzufügen einer MouseListener
auf den Tisch, und verbrauchen alle MouseEvent
s, aber das funktioniert nicht - wenn ich zurück true
aus isCellEditable()
dann meine Zuhörer nie erhält, klicken Sie auf alle events, aber wenn ich zurück false
dann F2 funktioniert nicht mehr.
Kann das erreicht werden, die nur mithilfe von Ereignis-Listenern? Ich würde es vorziehen, nicht zu verwirren mit dem PLAF-Funktionen, wenn ich es vermeiden kann.
InformationsquelleAutor finnw | 2009-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie, um Ihre eigenen cellEditor und ovveride
Können Sie unterscheiden zwischen single-und Doppel-klicken Sie mit der clickCount auf die eventObject
Wenn Ihr ein Klick und er ist auf einem markierten Zelle können Sie die Rückgabe true, sonst return false;
abrufen von Zeile und Spalte mit
aktivieren F2 können Sie benutzerdefinierte inputMap en actionMap Einträge
und von Ihrer Aktion können Sie dann Feuer die cellediting sich
InformationsquelleAutor Peter
Den DefaultCellEditor hat eine setClickCountToStart () - Methode zu Steuern Mausklicks für die Bearbeitung. Der Standardwert ist 2. Ändern, wird dies keinen Effekt auf die F2-Funktionalität.
Daher können Sie set Bearbeiten um ein dreifach-Klick.
Nicht genau, wie zwei einfache Klicks mit der Bearbeitung beginnen, aber ich vermute, Sie verwenden einen Timer zu verfolgen die erste klicken und dann die Bearbeitung, wenn der zweite Klick ist in Ihnen Zeit-Intervall.
InformationsquelleAutor camickr
Habe ich dies Problem gelöst, indem er die bestehenden
CellEditor
mit einemProxy
und abfangen AufrufeisCellEditable
, Rückgabe von false für alle Maus-Ereignisse aus und delegiert alle Aufrufe an die original -CellEditor
.Dies ist etwas komplexer als camickr Lösung, aber Sie funktioniert für alle Editoren (ich habe 4.)
Ich habe nicht realisiert, dass ein Teil noch nicht, aber ja, das hört sich gut an. Es gibt keine zeitliche Begrenzung.
InformationsquelleAutor finnw