web-dev-qa-db-fra.com

Obtention de l'élément sélectionné à partir d'une table JavaFX

Comment puis-je obtenir l'élément sélectionné à partir d'une TableView en JavaFX?

J'utilise actuellement

ObservableList selectedItems = taview.getSelectionModel().getSelectedItems();

mais cela ne me renvoie pas l'élément sélectionné dans le modèle de sélection.

28
Josejacob99

Ok, supposons que vous ayez une classe de modèle de données nommée Person. Par ici:

Person person = taview.getSelectionModel().getSelectedItem();
System.out.println(person.getName());    

Notez que TableView doit prendre un Person comme argument de type pour éviter de transtyper:

@FXML
private TableView<Person> taview;

ou 

TableView<Person> taview = new TableView<>();

lorsque votre ligne est sélectionnée, vous retournerez une instance Person. Ensuite, faites ce que vous voulez avec cette instance.

74
Branislav Lazic
    tableview.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
    @Override
    public void changed(ObservableValue observableValue, Object oldValue, Object newValue) {
        //Check whether item is selected and set value of selected item to Label
        if(tableview.getSelectionModel().getSelectedItem() != null) 
        {    
           TableViewSelectionModel selectionModel = tableview.getSelectionModel();
           ObservableList selectedCells = selectionModel.getSelectedCells();
           TablePosition tablePosition = (TablePosition) selectedCells.get(0);
           Object val = tablePosition.getTableColumn().getCellData(newValue);
           System.out.println("Selected Value" + val);
         }
         }
     });

En utilisant ce code, vous pouvez obtenir la valeur sélectionnée à partir de JAVAFX TABLEVIEW Cell.

Merci..

7
Java Man

@pranishres

Voici mon essai pour un écouteur de changement de sélection de cellule (même si la ligne ne change pas), inspiré du code de @Java Man:

tableView.getSelectionModel().setCellSelectionEnabled(true);
ObservableList selectedCells = tableView.getSelectionModel().getSelectedCells();

selectedCells.addListener(new ListChangeListener() {
    @Override
    public void onChanged(Change c) {
        TablePosition tablePosition = (TablePosition) selectedCells.get(0);
        Object val = tablePosition.getTableColumn().getCellData(tablePosition.getRow());
        System.out.println("Selected Value" + val);
    }
});
2
O. Durand