【发布时间】:2020-05-12 18:40:35
【问题描述】:
我有一个组合框 (cb)。当有人点击相关的文本字段时,我想清除它。我用
cb.getEditor().setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent evt) {
((TextField) evt.getSource()).clear();
}
});
结果在 cb.getEditor().getText()
到目前为止一切顺利。
如果我通过下拉而不是键入来填充框,则结果在cb.getSelectionModel().getSelectedIndex();
那也很好。组合框填充了一个对象,而不是一个字符串,所以我不能真正使用 getSelectedItem()。我希望我能。
问题是,如果我尝试从下拉列表中选择某些内容,然后使用编辑器,则 selectedIndex() 保持设置。
当我有文本字段的鼠标事件时,如何清除组合框 selectedIndex?我找不到从文本字段中获取组合框的方法。
我不知道它是否相关,但我也通过TextFields.bindAutoCompletion(cb.getEditor(), cb.getItems())); 将文本与框联系起来
【问题讨论】:
-
"组合框填充的是对象,而不是字符串,所以我不能真正使用
getSelectedItem()。" 为什么不呢? -
奇怪的是,NetBeans 不允许我这样做。如果我尝试,
cb.getSelectionModel().getSelectedItem().getSomeObjectProperty()它会编译,但在运行时我会得到“不是 Java.Lang.String 的属性” -
如果 NetBeans 不允许您运行它,您将如何运行它?您是否在组合框上设置了转换器?
-
这很奇怪。我正在 NB 中编译/运行,但是虽然我可以编译,但当我运行它并查看 selectedItem() 时,它说它是一个字符串。我做不到 (MyObject) (...getSelectedItem()) ;它说我无法将字符串转换为对象。
-
你设置转换器了吗?文档明确指出,如果组合框是可编辑的并且其类型不是
String,则必须设置转换器。 "默认情况下,转换器仅在用户键入时返回 String 输入,因此假定可编辑 ComboBox 的类型是 String。如果指定了不同的类型并且 ComboBox 是可编辑的,则有必要指定一个自定义 StringConverter。”