当通过编程方式打开组合框时,我遇到了定位和方向方面的问题。因为组合框位于表中的表行内,用户必须在一个单元格中总共单击三次才能打开组合框。为了方便起见,我创建了一个自定义类,允许一键编辑组合框。这很有效!然而,当组合框打开时,结果对话的左上角被塞进所选单元格的左上角,而不仅仅是在组合框的下方,并与组合框对齐。例如:
当用户通过使用鼠标滚轮或单击滚动条并移动它来滚动组合框时,此问题会自行纠正。
另一个有趣的问题是组合框并不总是以正确的方向打开。在UI底部的一个特定的表中,组合框将向下打开,在第1行到第5行中。在第4和第5行中,一旦用户滚动,组合框将移动到组合框上方的正确位置。第4行显示的组合框示例:
private class MyCustomComboBoxTableCell extends TableCell<MyCustomRow, String>{
private final ComboBox<String> comboBox;
public MyCustomComboBoxTableCell(ObservableList<String> items){
this.comboBox = new ComboBox<String>(items);
comboBox.setOnShown(new EventHandler<Event>(){
@Override
public void handle(Event event) {
getTableView().edit(getIndex(), getTableColumn());
getTableView().getSelectionModel().clearSelection();
}
});
comboBox.valueProperty().addListener(new ChangeListener<String>(){
@Override
public void changed(ObservableValue obs, String oldValue, String newValue) {
if(newValue != null && !newValue.equals(oldValue)){
commitEdit(comboBox.getSelectionModel().getSelectedItem());
}
}
});
addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event){
if(getIndex() < getTableView().getItems().size()){
startEdit();
comboBox.show();
}
}
});
}
@Override
public void startEdit(){
super.startEdit();
setGraphic(comboBox);
setText(null);
}
@Override
public void cancelEdit(){
super.cancelEdit();
setText((String)getItem());
setGraphic(null);
}
@Override
public void updateItem(String item, boolean empty){
super.updateItem(item, empty);
if(empty){
setGraphic(null);
} else {
if(isEditing()){
setGraphic(comboBox);
setText(null);
} else {
setGraphic(null);
setText(getItem());
}
}
}
}
开始编辑时,尚未对组合框
进行布局。弹出窗口将根据组合框
的当前边界显示,这意味着这些边界很可能是错误的。
在tableview
上触发布局传递应该可以解决此问题:
addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (getIndex() < getTableView().getItems().size()) {
startEdit();
// trigger layout pass
getTableView().applyCss();
getTableView().layout();
comboBox.show();
}
}
});
提前谢了。
我正在尝试使用一个可编辑的组合框。因为我想添加一个用于按回车键的监听器。我尝试了下面的选项,但都不起作用。:( < code>cmb_year是组合框对象。
我需要关于设置组合框按钮单元格的帮助。我使用一个组合框来显示可观察列表中的数据,该列表包含两个列的表中的数据,“步骤”和“下一步”(下一步包含一个插入在步骤列中的项目);我需要做的是显示带有“步骤”列表的组合框列表单元格和相对的“下一步”按钮单元格。现在,我可以正确地看到列表单元格,但我的按钮单元格总是空的。 代码: 提前感谢。
我试图创建一个,它将显示所选的预览,但是会显示字符串值。 唯一有效的方法似乎是创建
我想要一个组合框,它会在用户键入时过滤列表项。它应该如下工作: 键入时,文本字段应该显示一个可能的选择,但是用户尚未键入的单词部分应该突出显示。 当他打开列表时,下拉框应该只显示可能的选项? 使用箭头键,用户应该在缩小可能的项目后选择剩余的项目之一。 过滤并不重要,跳转到第一个匹配的选择也可以。 有类似的吗?
我正在用文本对象填充一个组合框。通过使用文本对象而不是字符串,我可以添加一个id值,我可以在程序中使用它,然后在我决定国际化UI时利用它。不管怎样,以下是我正在做的:主课: } 控制器: 测验fxml: 现在,这个很好用。但问题是,当我选择一个项目时,该项目上的文本会变成空白,如下所示: 如果我选择另一个,它也会消失: 我仍然可以选择这些项目,但它们只是不在那里。这是一个错误吗?如果是的话,有办法