2016-11-29 2 views
1

Ich verwende zwei Tabellen, die erste enthält "Teams", die zweite "Teammitglieder" und füllt basierend auf der ersten Tabellenauswahl. Ich zeige auch verschiedene Statistiken, abhängig von der Auswahl, sei es ein Team oder ein bestimmtes Mitglied. Wenn kein Mitglied ausgewählt ist, werden Teamstatistiken angezeigt, ansonsten werden Mitgliederstatistiken angezeigt.Die beste Methode zum Abfangen eines Klickereignisses auf dem Tabellenelement

Ich verwende ItemChangeListeners in den Tabellen, um die Statistiken neu zu zeichnen, aber dies verhindert, dass ich auf ein bereits ausgewähltes Team klicke, um ein ausgewähltes Mitglied aus diesem Team abzuwählen, da unter diesen Umständen kein Ereignis ausgelöst wird. Als Lösung verwende ich auch einen ClickListener in der Team-Tabelle, aber scheint es nur zu funktionieren, wenn ich auf das Wort klicke (anstatt an der ganzen Zelle zu arbeiten).

teamsTable.setClickListener("name", new Table.CellClickListener() { 
     @Override 
     public void onClick(Entity item, String columnId) { 
      if (teamsDs.getItem() == item) { 
       teamsDs.setItem(null); 
       teamsDs.setItem((Team) item); 
      } else { 
       teamsDs.setItem((Team) item); 
       teamsTable.setSelected((Team) item); 
      } 
     } 
    }); 

Gibt es eine bessere Möglichkeit, einen Klick auf eine Tabellenzelle zu fangen? Oder gibt es eine bessere Möglichkeit, das Problem insgesamt anzugehen?

+0

Ich habe gesehen, dass "nur auf das Wort nicht ganz Element" Sache vor. Versuchen Sie, eine Hintergrundfarbe und/oder Breitenhöhe (wenn möglich) auf die Elemente zu setzen. –

+0

Table.CellClickListener wurde entwickelt, um nur Klicks mit Text zu verarbeiten. Haben Sie versucht, die Zeile in einer Tabelle mit Strg + Klick abzuwählen? In diesem Fall sollte CollectionDatasource das ItemChange-Ereignis auslösen. – jreznot

+0

Eigentlich muss ich ein Element in einer anderen Tabelle (und Datenquelle) abwählen, indem ich auf ein bereits ausgewähltes Tabellenelement klicke, also suchte ich nach einem Zellklickereignis (wenn möglich) – gmlion

Antwort

2

Da CUBA Tabelle ist ein Wrapper von Vaadin Tabelle Sie ItemClickListener aus Vaadin mit CUBA Tabelle verwenden können:

public class DemoScreen extends AbstractWindow { 
    @Inject 
    private Table<User> usersTable; 

    @Override 
    public void init(Map<String, Object> params) { 
     super.init(params); 

     com.vaadin.ui.Table vTable = usersTable.unwrap(com.vaadin.ui.Table.class); 
     vTable.addItemClickListener((ItemClickEvent.ItemClickListener) event -> 
       showNotification("Item " + event.getItemId()) 
     ); 
    } 
} 

Es wird jedes Mal, wenn Sie auf eine Tabellenzelle klicken abgefeuert werden.

Verwandte Themen