【问题标题】:Add change listner to ComboBox when value remains unchanged当值保持不变时,将更改侦听器添加到 ComboBox
【发布时间】:2015-02-15 15:10:21
【问题描述】:

我有一个 ComboBox (JavaFX),它根据所选字符串显示来自数据库的信息。 例如:ComboBox中的值如下:

  • 表 1
  • 表 2

当我选择了表 1,然后我选择了表 2,检测到值变化并运行代码。

但是当我选择了表 1 并重新选择表 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)
        } 
    }
});

【问题讨论】:

    标签: java combobox javafx


    【解决方案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】:

      如果旧的选定值等于新值,则不会触发侦听器。但是,如果这是您想要的,您可以在单击组合框后清除所选值。

      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();
      
                  }
              });
      

      【讨论】:

        【解决方案3】:

        当值保持不变时,您不会更改值,因此不会触发任何事件。根据您要执行的操作,您可以 e。 G。向onHidden 添加一个监听器。它很难看,而且不包括 e。 G。当您以编程方式设置相同的值,但可以通过鼠标单击进行更改时。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-17
          • 2011-09-28
          • 1970-01-01
          • 2023-03-27
          相关资源
          最近更新 更多