我有一个ComboBox(JavaFX),它根据所选的字符串显示数据库中的信息。 例如:ComboBox中的值如下:
如果选择了表1,然后选择表2,则会检测到值更改并运行代码。
但是当我选择表1并重新选择表1时,未检测到值更改。相反,我希望代码从源数据库重新加载表。
当前代码:
myComboBox.valueProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue ov, String t, String t1) {
myComboBoxValue = t1;
if (t1 != null) {
displayTable(t1)
}
}
});
答案 0 :(得分:1)
如果旧的选定值等于新值,则不会触发侦听器。但是,如果这是您想要的,则可以在单击组合框后清除所选值。
myComboBox.valueProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue ov, String t, String t1) {
myComboBoxValue = t1;
if (t1 != null) {
displayTable(t1)
}
}
});
myComboBox.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
myComboBox.getSelectionModel().clearSelection();
}
});
答案 1 :(得分:1)
无论是否选择了新项目,都可以在ComboBox中对项目选择作出反应的工作方法:https://stackoverflow.com/a/25704438/4749209
基于此解决方案,您的示例代码将保持如下:
myComboBox.showingProperty().addListener((ov, old_show_state, new_show_state) ->
{
// checks if the combobox popup menu was closed
if (new_show_state == false)
{
myComboBoxValue = myComboBox.getValue();
if (myComboBoxValue != null)
{
displayTable(myComboBoxValue)
}
}
});
唯一需要提及的问题是,如果用户在组合框弹出式菜单区域外单击,则会发生您提到的重新加载操作,因为它也会关闭。
答案 2 :(得分:0)
当值保持不变时,不会更改值,因此不会触发任何事件。根据你的目的,你可以做到。 G。添加一个监听器onHidden。这很难看,也不包括e。 G。当您以编程方式设置相同的值,但通过鼠标单击可以进行更改。