我有一个带有ComboBoxTableCell的TableView,当使用默认实现时,用户必须单击三次次以从ComboBox列表中选择一个值。 我希望当用户点击单元格以显示组合框列表时。我的解决方案基于这个: JavaFX editable ComboBox in a table view
单元格确实进入编辑模式(调用startEdit())但是需要再次单击才能显示值列表,我缺少什么?
table.addEventHandler(MouseEvent.MOUSE_CLICKED, (e) ->
{
if (table.getEditingCell() == null)
{
TablePosition focusedCellPos = table.getFocusModel().getFocusedCell();
table.edit(focusedCellPos.getRow(), focusedCellPos.getTableColumn());
}
});
感谢。
答案 0 :(得分:1)
有趣的问题-一段时间后再次冒泡:)
看起来OP的方法确实有效(从fx11开始,其编辑中的一些错误似乎已修复)-在组合单元的帮助下:
代码段:
// set editable to see the combo
table.setEditable(true);
// keep approach by OP
table.addEventHandler(MouseEvent.MOUSE_CLICKED, (e) -> {
TablePosition<Person, ?> focusedCellPos = table.getFocusModel()
.getFocusedCell();
if (table.getEditingCell() == null) {
table.edit(focusedCellPos.getRow(),
focusedCellPos.getTableColumn());
}
});
// use modified standard combo cell shows its popup on startEdit
firstName.setCellFactory(cb -> new ComboBoxTableCell<>(firstNames) {
@Override
public void startEdit() {
super.startEdit();
if (isEditing() && getGraphic() instanceof ComboBox) {
// needs focus for proper working of esc/enter
getGraphic().requestFocus();
((ComboBox<?>) getGraphic()).show();
}
}
});
答案 1 :(得分:0)
也许不是解决此问题的最佳方法,但我找到了一种解决方法,只需单击一下鼠标,即可使ComboBoxTableCells下拉菜单:
column.setCellFactory(new Callback<TableColumn<Person, String>, TableCell<Person, String>>() {
@Override
public TableCell<Person, String> call(TableColumn<Person, String> column) {
ComboBoxTableCell cbtCell = new ComboBoxTableCell<>(cbValues);
cbtCell.setOnMouseEntered(new EventHandler<Event>() {
@Override
public void handle(Event event) {
// Without a Person object, a combobox shouldn't open in that row
if (((Person)((TableRow)cbtCell.getParent()).getItem()) != null) {
Robot r = new Robot();
r.mouseClick(MouseButton.PRIMARY);
r.mouseClick(MouseButton.PRIMARY);
}
}
});
return cbtCell;
}
});
PS:我知道这个话题有点老了,但是最近我也偶然发现了这个问题,无法在线找到任何可行的解决方案。令我难过的是,这不是最干净的解决方法,但至少可以做到这一点。 ;)