2017-02-21 1 views
0

Ich möchte ein MouseEvent in meinem NatTable für alle Zellen implementieren, die über die ComboBoxCellEditor-Klasse implementiert werden. Wenn ein einzelner Klick auf das Kombinationsfeld erfolgt, sollte das Dropdown-Feld mit den Einträgen geöffnet werden. Daher habe ich in meiner UiBindingRegistry eine FirstSingleClickBinding registriert.Warum kann ich CellEditorMouseEventMatcher nicht mit einem bestimmten CellEditor in Java NatTable implementieren?

Ich benutzte den BodyCellEditorMouseEventMatcher und es funktionierte perfekt. Aber da dieser Matcher veraltet ist, möchte ich ihn nicht mehr verwenden. Es heißt also, dass ich den CellEditorMouseEventMatcher verwenden sollte, den ich ausprobiert habe, aber es funktioniert nicht so, wie ich es erwarte. Die Dokumentation der CellEditorMouseEventMatcher sagt der folgende:

Implementierung von {@link IMouseEventMatcher}, die, wenn Bearbeitung
* überprüfen werden sollte aktiviert werden. Dazu ist es möglich, die Region Label
* reagieren auf die Maustaste, um anzugeben, der verwendet wurde klicken und wenn ein Redakteur
* registriert für die Zelle ist, auf dem die Maus Klick ausgeführt wurde. Wenn keine Region
* Label angegeben ist, wird nur die Maus Schaltfläche und das Vorhandensein eines Zelleneditors
* ausgewertet.

Aber ich kann keinen Zelleditor als Parameter verwenden, was bedeutet der letzte Satz? Ich habe nur die Möglichkeit, eine Schaltfläche und/oder eine Regionsbezeichnung als Parameter anzugeben. Wie kann ich mit diesem EventMatcher das gleiche Ergebnis erzielen wie mit dem BodyCellEditorMouseEventMatcher? Ich benutze verschiedene Arten von Zellen, so dass es wichtig ist, dass nur die Combo-Boxen dieses Verhalten bekommen.

Hier ist meine „veraltet“ Code:

private void editCombosOnSingleClick(final UiBindingRegistry uiBindingRegistry) { 
    uiBindingRegistry.registerFirstSingleClickBinding(new BodyCellEditorMouseEventMatcher(ComboBoxCellEditor.class), 
     new MouseEditAction()); 
} 

Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen. Danke :)

Antwort

1

Mit der CellEditorMouseEventMatcher müssen Sie nicht die Editor-Implementierung angeben. Sie geben nur die Region und die Schaltfläche an (beide optional). Wenn ein Editor geöffnet werden soll oder nicht, wird einfach überprüft, ob es einen Editor gibt. Der Typ des Editors spielt keine Rolle.

uiBindingRegistry.registerSingleClickBinding(
      new CellEditorMouseEventMatcher(GridRegion.BODY, MouseEventMatcher.LEFT_BUTTON), 
      new MouseEditAction()); 

Mit dem BodyCellEditorMouseEventMatcher Sie einen neuen Matcher für jeden Editor registrieren Sie benötigt hinzugefügt. Dies ist ein Konstruktionsfehler, weil der Typ des Editors keine Rolle spielen sollte. Die Steuerung, ob eine Zelle editierbar ist oder nicht, erfolgt über IEditableRule oder sogar durch Registrierung eines Zelleneditors.

Am Ende müssen Sie sicherstellen, dass Sie entweder nur Editoren für bearbeitbare Zellen registrieren, was wiederum bedeutet, dass Sie die Konfiguration anpassen müssen, um sicherzustellen, dass TextCellEditor nicht als Standardeditor registriert ist (siehe DefaultEditConfiguration). Oder Sie geben eine IEditableRule an, die nur dann als wahr ausgewertet wird, wenn der Editor-Typ ComboBoxCellEditor ist, oder noch besser die IEditableRule#ALWAYS_EDITABLE nur für die gleiche Beschriftung wie der Editor und standardmäßig die IEditableRule#NEVER_EDITABLE.

+0

Vielen Dank für Ihre schnelle Antwort! Tatsächlich sind fast alle Zellen, die ich benutze, editierbar. Aber ich möchte nicht, dass die normalen Zellen jedes Mal, wenn Sie darauf klicken, in den "Bearbeitungsmodus" gelangen (und ich würde die Auswahlereignisse meines Erachtens überschreiben). Alle Kombinationsfelder haben diesen kleinen Pfeil auf der rechten Seite, der ihre Einträge öffnet.Ich möchte genau dasselbe Verhalten, wenn Sie einfach auf sie klicken (Sie müssen also nicht auf den Pfeil "zielen"). Weißt du, wie ich das schaffen kann? – mkaay

+1

Das ist das Standardverhalten. Keine Notwendigkeit, etwas Besonderes dafür zu tun. –

+0

Oh ... so etwas in meinem Code überschreibt diese Funktionalität ... Vielen, vielen Dank! :) – mkaay

Verwandte Themen