我在javafx tableview中遇到以下问题,我的表视图已连接到某些模型,并且正常的CRUD操作没有问题,我还添加了一个未连接到ANY数据模型的列,它仅包含一个超链接哪个用户可以单击,然后弹出提示。
所有这些工作,不起作用的是,当我单击超链接时,我还希望传递行值,通常它的工作原理类似于
tableview.getSelectionModel().getSelectedItem();
但是现在不起作用,因为我没有直接单击单元格,而是单击了超链接,如果先单击某行,然后单击超链接,则会得到突出显示的那一行。单击超链接时有什么方法可以选择行,所以我不必先单击行,然后再单击同一行中的超链接。
public class RemoveCell<T> extends TableCell<T, Void> {
private final Hyperlink link;
private final Hyperlink link1;
private final HBox pane = new HBox();
public RemoveCell() {
link = new Hyperlink("Remove");
link1 = new Hyperlink("Edit");
pane.getChildren().addAll(link,link1);
link1.setOnAction(evt -> {
//lagerRet();
if(tableView.getSelectionModel().getSelectedItem()!=null) {
System.out.println("not null");
}
else {
System.out.println("null");
}
// remove row item from tableview
// ap.getChildren().removeAll();
//ap.getChildren().setAll(mcon.loadParent(FxmlView.CHART));
PopOver popsy = new PopOver();
try {
popsy.setContentNode(control.loadUni(FxmlView.POP));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//popsy.setContentNode(panemain);
popsy.headerAlwaysVisibleProperty().set(true);;
popsy.show(link);
});
link.setOnAction(evt -> {
// remove row item from tableview
System.out.println("a quick test");
});
}
@Override
protected void updateItem(Void item, boolean empty) {
super.updateItem(item, empty);
setGraphic(empty ? null : pane );
//setGraphic(empty ? null : link1 );
}
}
最后是我如何填充列
testColumn.setCellFactory(tc -> new RemoveCell<>());
答案 0 :(得分:1)
可以通过包含TableRow
的{{1}}访问行项目。
TableCell
还可以使用T item = getTableRow().getItem();
在TableView.items
中获得索引,该索引允许删除而无需先在列表中搜索项目。
TableCell.getIndex