如何使用事件处理程序从JavaFXML中不可编辑的ComboBox中获取数据?

时间:2018-11-03 01:20:43

标签: java combobox eventhandler

我试图从不可编辑的JavaFXML组合框中选择一个项目,然后简单地输出结果。我通过以下方式在组合框上使用了鼠标单击事件:

public AppController() {
    ageCBox = new ComboBox<>(MainApp.setYearCBoxView());
    ageCBox.addEventHandler(MouseEvent.MOUSE_CLICKED, (MouseEvent) -> 
    { 
      System.out.println("His age is ageCBox.getSelectionModel().getSelectedItem()); 
    });
  }

我现在已经成功初始化了cBox,因为我已经在许多其他应用中重用了此控件。

当我单击组合框时会发生以下顺序:

Click 1: Open the selection list by clicking the CBox chevron: Result: “His age is null”.
Click 2: Select ‘21’ from the selection list: Result: nothing printed
Click 3: Open the selection list by clicking the CBoc chevron: Result: “His age is 21”.
Click 4: Select ‘25’ from the selection list: Result: nothing printed

我想发生的事情是:

Click 1: Result: nothing printed
Click 2: Result: “His age is 21”
Click 3: Result: nothing printed
Click 4: Result: “His age is 25”

通过使用SceneBuilder定义CBox并将CBox绑定到控制程序中的FXML处理程序和FXML变量,我已经成功地完成了这一工作。但是我不想这样定义我的ageCBox,因为我的数据输入区域GridPane必须在不同的GridPane单元内外交换不同的控件。我不希望这些不需要使用的“变量”控件在GUI视图中徘徊。我可以通过使用SceneBuilder在界面上的其他位置指定控件(具有可见性和启用的设置“ false”),然后将其“移动”到所需的网格窗格单元并将设置设置为“ true”,从而实现所需的功能尽管我觉得这是一种笨拙而不是最佳的方法。

在Swing中,事件处理程序上有一个方法如下:

private void getRowDetail(ListSelectionEvent e) 
  {
    if (e.getValueIsAdjusting() ) {
      return;
  }
else carry on..

据我所知,这避免了FXML处理程序当前遇到的问题,在该问题中似乎不支持getValueIsAdjusting或ListSelection事件。

用以下内容完美替代上述内容:

在AppController构造函数中,我输入:

ageCBox.getSelectionModel().selectedItemProperty().addListener(
            (observable, oldValue, newValue) -> handleAgeComboBox());

然后为了验证它是否起作用,我创建了一个处理程序方法:

private void handleAgeComboBox(){
    System.out.println("His age is " +     ageCBox.getSelectionModel().getSelectedItem());
  }

0 个答案:

没有答案