我一直在环顾四周,注意到这篇文章的回复: Detect doubleclick on row of TableView JavaFX
但是,这篇文章使用lambda表达式,我不确定如何转换它们以用于JavaFX 2代码。我的主要目标是能够单击一行,然后弹出一个新窗口,其中包含存储在该行中的信息。只要我能使Callback工作,我就可以从那里拿走它!任何建议将不胜感激。
table.setRowFactory( tv -> {
TableRow<MyType> row = new TableRow<>();
row.setOnMouseClicked(event -> {
if (event.getClickCount() == 2 && (! row.isEmpty()) ) {
MyType rowData = row.getItem();
System.out.println(rowData);
}
});
return row ;
});
答案 0 :(得分:1)
你走了:
table.setRowFactory(tv -> {
TableRow<MyType> row = new TableRow<>();
row.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getClickCount() == 2 && (!row.isEmpty())) {
MyType rowData = row.getItem();
System.out.println(rowData);
}
}
});
return row;
});
根据您的IDE,当光标位于setOnMouseClicked()
的括号中时,您通常可以按ctrl + space,它会告诉您它需要什么。然后你可以输入new EventHandler
(或者它需要的任何东西),按回车键,大多数IDE会自动为你完成整个方法。然后你可以粘贴内脏。
答案 1 :(得分:0)
Aconselho a usarem esse metodo, é muito mais fácil e rápido para solucionar o problema。
建议你用这种方式解决问题
@FXML
public void handle(MouseEvent event) {
if (event.getClickCount() == 2) {
TableView.TableViewSelectionModel<Pessoa> p = tableFamilia.getSelectionModel();
System.out.println(p.getSelectedItem().getNome());
}
}