Wie fügen Sie einer bestimmten Zeile oder allen Zeilen in einer Tabelle einen Zeilenlistener hinzu? Ich muss den Zeilen einen Typ von "onMouseOver" Listener hinzufügen, so dass, wenn Sie den Mauszeiger darüber bewegen, die Hintergrundfarbe der Zeile geändert wird, ähnlich wie es bei getRowFormatter möglich ist.Wie fügen Sie einem Flextable in GWT einen Zeilenlistener hinzu?
Antwort
Gesetzt GWT 1.5.3:
CLICK EVENT HANDLING
Wenn Sie FlexTable
verwenden und einen Click-Ereignishandler wollten, könnten Sie die FlexTable.addTableListener()
verwenden und deine eigenen TableListener
registrieren. Das Objekt TableListener
muss den Rückruf onCellClicked
implementieren, der Ihnen die Zeilennummer geben würde.
ANDERE EVENTS HANDLING (z HOVER)
Wenn Sie andere Arten von Veranstaltungen als Klick anderen müssen zu handhaben (sagen wir, schweben), GWT zur Zeit nicht über eine Schnittstelle bereit dafür. Du bist ziemlich alleine geblieben, um sie selbst zu implementieren. Es gibt zwei Möglichkeiten, es zu tun, dass ich von jetzt denken kann:
Die schnelle und schmutzige Art und Weise, wahrscheinlich durch JSNI ausnutzt, die ein Mittel bereitstellt für Sie Javascript in Ihren GWT-Code zu injizieren. Ich habe nicht viel JSNI (abgesehen von wirklich harten Workarounds, die es nicht wert sind, sie in reines GWT zu schreiben) in meinem Code verwendet, so dass ich Ihnen kein Beispiel zeigen kann; Aber ehrlich gesagt werde ich das nicht empfehlen, da es Wartbarkeit und Erweiterbarkeit reduziert.
Wenn Sie eine native GWT-Schnittstelle wünschen, können Sie eine neue Klasse erstellen, die HTMLTable oder FlexTable erbt. Rufen Sie im Konstruktor die Funktion
sinkEvents
mit Ihren erforderlichen Ereignissen auf. (z. B. für den Hover benötigen Sie wahrscheinlich sinkEvents (Event.ONMOUSEOVER)). Dann benötigen Sie die onBrowserEvent-Funktion, die den Mouseover behandelt.Eine schnelle Vorlage, wie der Code aussehen sollte:
import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.FlexTable; public class FlexTableWithHoverHandler extends FlexTable { public FlexTableWithHoverHandler() { super(); sinkEvents(Event.ONMOUSEOVER); } @Override public void onBrowserEvent(Event event) { switch(DOM.eventGetType(event)) { case Event.ONMOUSEOVER: // Mouse over handling code here break; default: break; } } }
Die besten lernen, wie dies zu codieren ist, indem man die GWT-Quellcode selbst (Suche nach
sinkEvent
) und immer das Gefühl, wie um es auf die GWT-Art zu tun.
// this is click
final FlexTable myTable = new FlexTable();
myTable.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
Cell cell = myTable.getCellForEvent(event);
int receiverRowIndex = cell.getRowIndex(); // <- here!
}
});
ändern Sie "usersTable" zu "myTable" und Sie haben eine nette Lösung. –
Ich fand es viel einfacher Javascript direkt mit dem TR-Elemente hinzuzufügen. Mein Code geht davon aus, dass ein Widgets-DOM-Elternteil ein TD ist und das Großelternteil das TR, also müssen Sie sicher sein, dass Sie Ihr DOM kennen.
Hier ist mein Code. Schön und einfach, keine JSNI oder GWT DOM Event Management erforderlich.
TabelleRowElement rowElement = (TableRowElement) checkbox.getElement(). GetParentElement(). GetParentElement();
rowElement.setAttribute ("onMouseOver", "this.className = '" + importRecordsResources.css(). NormalActive() + "'");
rowElement.setAttribute ("onMouseOut", "this.className = '" + importRecordsResources.css().normal() + "'");
Ich habe es gerade diese einfache Art und Weise:
protected void handleRowsSelectionStyles(ClickEvent event) {
int selectedRowIndex = fieldTable.getCellForEvent(event).getRowIndex();
int rowCount = fieldTable.getRowCount();
for (int row = 0; row < rowCount; row++) {
Element rowElem = fieldTable.getRowFormatter().getElement(row);
rowElem.setClassName(row == selectedRowIndex ? "row selected" : "row");
}
}
Sie rufen diese Methode aus den Zellen, die Sie
int row = 0;
for (final RowDataProxy rowData : rowDataList) {
Label fieldName = new Label(rowData.name());
fieldName.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
handleRowsSelectionStyles(event);
}
});
fieldTable.setWidget(row++, 0, fieldName);
}
Mit besten Grüßen,
Zied Hamdi
- 1. GWT: FlexTable vs Tabelle
- 2. Fügen Sie einen Tag zu einem Enddatum in Angular hinzu
- 3. Fügen Sie einen Zeilenumbruch in einem HTML-Textbereich hinzu
- 4. Fügen Sie einen Link in einem div-Tag hinzu
- 5. So fügen Sie einen UIImageView in einem UIStackView ordnungsgemäß hinzu
- 6. Fügen Sie einem vorhandenen Ausdruck einen weiteren regulären Ausdruck hinzu
- 7. So fügen Sie einen Rückruf zu einem Webformular hinzu Projekt
- 8. GWT - So fügen Sie eine einfache ComboBox hinzu
- 9. Ruby: Fügen Sie einen dynamischen Modulnamen hinzu
- 10. So fügen Sie einem Array bei Klickereignis einen Wert hinzu
- 11. Fügen Sie einen Dokumentverweis zu PDF hinzu
- 12. Fügen Sie einen Listeneintrag über Javascript hinzu
- 13. So fügen Sie einen Aufpreis hinzu
- 14. Wie fügen Sie einen Link zum Thumbnail in WordPress hinzu?
- 15. Wie fügen Sie Randbeschriftungen in Graphviz hinzu?
- 16. So fügen Sie einem Spiel Punkte hinzu
- 17. Wie fügen Sie dem Text einen Strich hinzu?
- 18. GWT: Fügen Sie einen Event-Handler für alle div-Elemente hinzu
- 19. Fügen Sie EditText in Android AlertDialog einen größeren Rand hinzu
- 20. Wie fügen Sie GPUImage zu einem iOS-Projekt hinzu?
- 21. Wie fügen Sie einen Haltepunkt zu objc_exception_throw hinzu?
- 22. Wie programmatisch fügen Sie einen Tracepoint für Visual Studio hinzu?
- 23. Wie fügen Sie einem FormData() - Objekt ein Enctype-Attribut hinzu?
- 24. SharpDevelop, Wie fügen Sie eine DataSource hinzu?
- 25. Wie fügen Sie einen Ausschluss mit covselect hinzu?
- 26. Wie fügen Sie einen Timer zu einer C# -Konsolenanwendung hinzu
- 27. So fügen Sie einen Textumriss in Einheit hinzu
- 28. So fügen Sie Eingabewerte hinzu
- 29. So fügen Sie mehrere Header-Ansichten in einem ListView hinzu
- 30. Apache POI fügen Sie einen Seriennamen in LineChart hinzu
anklickbar sein wollen Wie findest du die Reihe der Zelle, über der du schwebst? Ich kann die Zelle finden, aber nicht, wie man den Zeilenformatierer auf die Zeile anwendet, die die Zelle enthält. – Organiccat
Ich habe es, vergessen, die Tabelle zu verweisen, versuchte, die übergeordnete Tabelle aus der Zelle zu ziehen, oops: p – Organiccat