gpt4 book ai didi

java - 如何检测双击 JavaFx 中的 ComboBox (TableCell Combobox)?

转载 作者:行者123 更新时间:2023-11-30 09:59:13 25 4
gpt4 key购买 nike

我正在创建一个包含 2 列的 TableView ,该表的每个填充单元格都是一个 ComboBox。这就是我实现这个的方式

    private void loadTable() {
vBox.getChildren().clear();
this.tableView = new TableView<>();
tableView.setEditable(true);

TableColumn<CustomClass, Products> prodCol = createComboBoxColumn("products", "Product", Products.class,
productObList);
prodCol.setMinWidth(300);
prodCol.setOnEditCommit(e -> {
if (!e.getTableView().getItems().isEmpty()) {
System.out.println("e.getNewValue().getId(): " + e.getNewValue().getId());
Products product = productsModel.getProductsById(e.getNewValue().getId());
e.getTableView().getItems().get(e.getTablePosition().getRow()).setProducts(product);
}
tableView.refresh();
});
tableView.getColumns().add(prodCol);

TableColumn<CustomClass, Brand> brandCol = createComboBoxColumn("brand", "Brand", Brand.class,
brandObList);
brandCol.setMinWidth(300);
brandCol.setOnEditCommit(e -> {
if (!e.getTableView().getItems().isEmpty()) {
System.out.println("e.getNewValue().getId(): " + e.getNewValue().getId());
Brand brand = brandModel.getBrandById(e.getNewValue().getId());
e.getTableView().getItems().get(e.getTablePosition().getRow()).setBrand(brand);
}
tableView.refresh();
});
tableView.getColumns().add(brandCol);
// tableView.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {

// @Override
// public void handle(MouseEvent event) {
// if (event.getClickCount() == 2) {
// System.out.println("on Click");
// if (event.getTarget() instanceof ComboBox) {
// System.out.println(((ComboBox) event.getTarget()).getSelectionModel().getSelectedItem());
// }
// }
// }

// });

tableView.getItems().addAll(brandManifestCustomObList);
vBox.getChildren().addAll(tableView);

}

和 createComboboxColumn 方法作为

public static <T> TableColumn<CustomClass, T> createComboBoxColumn(String name, String columHeading,
Class<T> type, ObservableList list) {
TableColumn<CustomClass, T> column = new TableColumn<>(columHeading);
column.setCellFactory(ComboBoxTableCell.forTableColumn(list));
column.setResizable(true);
column.setMaxWidth(100);
column.setEditable(true);
column.setCellValueFactory(new PropertyValueFactory<>(name));
return column;
}

我无法实现的是检测表格单元格组合框上的双击(甚至单击)。一旦我选择了其他行并回到这个表格单元格并双击,只有这样我才能检测到单元格上的双击。

显而易见的原因是,一旦我点击一个单元格,它就会变成一个组合框,而我还没有编写代码来检测它,因为我不知道在这种情况下该怎么做。另外,如果可能的话,我需要检测 TableView 中单元格的列索引。以下问题没有回答我正在寻找的内容:

1) JavaFx: ComboBox Table Cell double click

2) Detect mouse click on SELECTION Editable ComboBox JavaFX

3) Select JavaFX Editable Combobox text on click

最佳答案

也许你可以使用

tableView.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {

@Override
public void handle(MouseEvent event) {
if (event.getClickCount() == 2) {
System.out.println("on Click");

if (event.getTarget() instanceof ComboBox) {
System.out.println(((ComboBox) event.getTarget()).getSelectionModel().getSelectedItem());
}
if (event.getTarget() instanceof ComboBoxTableCell<?,?>) {
System.out.println(((ComboBoxTableCell) event.getTarget()).getItem().toString());
}
}
}



});

因为表格单元格现在已更改为 ComboBoxTableCell。为了获得 tableView 的列,我从 here 得到了一些想法。由 James_D 给出。你可以使用

TablePosition pos = tableView.getSelectionModel().getSelectedCells().get(0);
int row = pos.getRow();
BrandManifestCustom bmc = tableView.getItems().get(row);
TableColumn col = pos.getTableColumn();
if (col.getCellObservableValue(bmc).getValue() instanceof Products) {
System.out.println("hey Products");
}
if (col.getCellObservableValue(bmc).getValue() instanceof Brand) {
System.out.println("hey Brand");
}

关于java - 如何检测双击 JavaFx 中的 ComboBox (TableCell Combobox)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59092478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com