java - 仅对表格中的选定行启用编辑
问题描述
我是 JavaFX 的新手。我有一个包含多列的表格,button
每行都有一个编辑。每当我单击第Edit
一个单元格时,都会选择该行进行编辑。一切正常,但问题是每当我选择一行并单击其中的一个单元格时,虽然我没有单击它,但它也会进入编辑模式Edit
。我认为这是因为我已经做了tableView.setEditable(true)
,但我只想在单击编辑按钮时启用编辑,并且仅在该行上启用编辑,而不是在我双击/单击时启用编辑。我已经看到了这一点,但他们已经通过弹出窗口解决了这个问题。我不想要那个。在initialize()
我尝试这种方式的方法中,但它并不完全有效。任何人都可以告诉我这样做的正确方法吗?
tableBuilding.setRowFactory(tv -> {
TableRow<ModelBrBuilding> row = new TableRow<>();
row.addEventFilter(MouseEvent.MOUSE_PRESSED, e -> {
if (e.getButton() == MouseButton.SECONDARY) {
e.consume();
}
});
row.addEventFilter(MouseEvent.MOUSE_PRESSED,event -> {
if ( event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2 ) {
event.consume();
}
});
return row ;
});
我的按钮动作看起来像
EditButton.setOnAction((ActionEvent event)->{
TableRow row = cell.getTableRow();
tableBuilding.requestFocus();
tableBuilding.getSelectionModel().select(row.getIndex());
int i=tableBuilding.getSelectionModel().getSelectedIndex();
tableBuilding.edit(i,colName);
});
解决方案
对此可能有更优雅的解决方案,但您可以TableView
在调用之前简单地设置可编辑tableView.edit(int, TableColumn)
,然后在提交或取消编辑时将其设置回不可编辑。或者您可以在每个特定的TableColumn
.
例如,在您Button
的动作处理程序中:
button.setOnAction(evt -> {
evt.consume();
tableView.requestFocus();
tableView.edit(-1, null); // cancel any current edit if there is one
tableView.getSelectionModel().select(tableCell.getIndex());
tableView.setEditable(true);
tableView.edit(tableCell.getIndex(), tableColumn);
});
然后对于TableColumn
:
EventHandler<TableColumn.CellEditEvent<S, T>> handler = evt -> tableView.setEditable(false);
tableColumn.setOnEditCancel(handler);
tableColumn.setOnEditCommit(handler);
// or you can use the addEventHandler(EventType, EventHandler) method
推荐阅读
- json - Spring boot jpa manytomany json 现在完全显示
- javascript - React Native + Spring Boot:将 WebSockets 用于聊天应用程序
- node.js - 如何防止立即关闭我的应用程序
- javascript - 无法从 JavaScript 对象访问属性
- sql - 如何比较具有不同行数的日期列?
- snowflake-cloud-data-platform - Snowflake 能否用于缓解应用程序故障以实现业务连续性?
- php - 如何加快在 Windows Docker 中加载 nginx?
- apache-flink - BroadcastProcessFunction 处理延迟
- c# - .NET Framework 中是否有公开/标准的 Encoding.UTF8NoBOM?
- qt - PCManFM-Qt。如何更改背景颜色?