2016-07-20 24 views
1

Ich brauche eine Möglichkeit, die Benutzerauswahl jedes Mal zu erhalten, wenn ein Benutzer ein Element in einem TableView auswählt, auch wenn das Element bereits ausgewählt ist.Wie erkennt man eine Auswahl in JavaFX TableView, wenn man auf ein markiertes Objekt klickt?

Die tableView.getSelectionModel().selectedItemProperty().addListener funktioniert, wenn der Benutzer wählt ein verschiedenes Element aus dem einen hervorgehoben, aber wenn der Benutzer wieder den markierten Eintrag wählt, ist es nicht zu funktionieren scheint.

Wie würde das behoben werden?

Antwort

3

Sie können dies tun:

tableView.setOnMouseClicked((MouseEvent event) -> { 
     if(event.getButton().equals(MouseButton.PRIMARY)){ 
      System.out.println(tableView.getSelectionModel().getSelectedItem()); 
     } 
    }); 

den obigen Code funktioniert nicht, wenn Sie das markierte Element wieder mit editierbaren Tabellenzelle

0

wählen Wenn Sie daran interessiert sind nur in den Klicks auf die Zeilen sind , verwenden Sie eine benutzerdefinierte rowFactory:

TableView<Item> table = ... 
EventHandler<MouseEvent> clickListener = evt -> { 
    TableRow<Item> row = (TableRow<Item>) evt.getTarget(); 
    if (!row.isEmpty()) { 
     // do something for non-empty rows 
     System.out.println("you clicked " + row.getItem()); 
    } 
}; 

table.setRowFactory(tv -> { 
    TableRow<Item> row = new TableRow<>(); 

    // add click listener to row 
    row.setOnMouseClicked(clickListener); 

    return row; 
}); 
Verwandte Themen