Javafx tableview How to get the row I clicked?

here is my code

// this event is attached to TableCell
public EventHandler dblclickDescription = new EventHandler<MouseEvent>(){
    @Override
    public void handle(MouseEvent event) {
        if(event.getButton().equals(MouseButton.PRIMARY)){
            if(event.getClickCount() == 2){
                printRow(event.getTarget());
            }
        }
        event.consume();
    }
};

// print row
public void printRow(Object o){
    Text text = (Text) o;

    // ??? don't know what to write here

   System.out.println(row.toString());
}

1) how can I get from the cell that I clicked on the row?

2) Can I attach an event to an entire row instead of each column?

EDIT: 3) I thought I attached this event to TableCell

TableCell cell = TableColumn.DEFAULT_CELL_FACTORY.call(p);
cell.setOnMouseClicked(dblclickDescription);

but when I tested

event.getSource();// is a TableColumn
event.getTarget();// is a Text if clicked on text
event.getTarget();// is a TableColumn if clicked on empty space, even if that cell has text

Is there any way to get TableCell from MouseEvent?

+4
source share
2 answers

To answer your specific questions:

how can i get from the cell i clicked on the row?

TableCelldefines a method getTableRow()by returning TableRow. So you can do

Object item = cell.getTableRow().getItem();

which will give you the row element from the table (i.e. the correct element table.getItems()). You can also get this from table.getItems().get(cell.getIndex())if you want.

?

. rowFactory:

TableView<MyDataType> table = new TableView<>();

table.setRowFactory(tv -> {
    TableRow<MyDataType> row = new TableRow<>();
    row.setOnMouseClicked(event -> {
        if (! row.isEmpty() && event.getButton()==MouseButton.PRIMARY 
             && event.getClickCount() == 2) {

            MyDataType clickedRow = row.getItem();
            printRow(clickedRow);
        }
    });
    return row ;
});

// ...

private void printRow(MyDataType item) {
    // ...
}
+10

, :

Object object =  table.getSelectionModel().selectedItemProperty().get();
int index = table.getSelectionModel().selectedIndexProperty().get();

, / :

table.getSelectionModel().selectedIndexProperty().addListener((num) -> function());
+2

All Articles