如何在JavaFX中实现Swing中的MouseListener

如何在JavaFX中实现Swing中的MouseListener,java,eclipse,swing,javafx,event-handling,Java,Eclipse,Swing,Javafx,Event Handling,我用Swing编写了一个简单的登录面板,现在我必须用JavaFX重做所有事情,但我不知道如何转换ActionListeners/MouseListener 无论何时选中/取消选中“Neu Anmeldung”复选框,都应该在Eclipse控制台中看到值true/false 我的Swing代码用于此目的: // ... this.jBoxNeuAnmeldung.addMouseListener(new MouseAdapter() { @Override public

我用Swing编写了一个简单的登录面板,现在我必须用JavaFX重做所有事情,但我不知道如何转换ActionListeners/MouseListener

无论何时选中/取消选中“Neu Anmeldung”复选框,都应该在Eclipse控制台中看到值true/false

我的Swing代码用于此目的:

// ...

this.jBoxNeuAnmeldung.addMouseListener(new MouseAdapter() {
      @Override
      public void mouseClicked(MouseEvent e) {
        if (LoginFrame.this.jBoxNeuAnmeldung.isSelected())
          neuAnmeldung = true;
        else
          neuAnmeldung = false;
        System.out
            .println("Neu-Anmeldung Checkbox angekreutzt? " + neuAnmeldung);
      }
    });

// ...
我如何使用JavaFX做同样的事情

    ...
    checkBox.setOnAction((event) -> {
        neuAnmeldung = checkBox.isSelected();
        System.out.println("Neu-Anmeldung Checkbox angekreutzt? "
                + neuAnmeldung);
    });
用复选框名称替换复选框,例如

    final CheckBox jBoxNeuAnmeldung = new CheckBox();
    ...
    jBoxNeuAnmeldung.setOnAction((event) -> {
        neuAnmeldung = jBoxNeuAnmeldung.isSelected();
        System.out.println("Neu-Anmeldung Checkbox angekreutzt? "
                + neuAnmeldung);
    });     

(在标准Java 8中,当在labmda表达式中使用时,您也可以省略final in复选框)。

通过将
ChangeListener
添加到
selected
属性

checkBox.selectedProperty().addListener((observable, oldValue, newValue) -> System.out.println("Neu-Anmeldung Checkbox angekreutzt? " + newValue));

我使用
ActionEvent
实现了一个更简单的方法,并将其连接到我的FXML文件中。

不起作用!无法从类型CheckBoxcheckBox中静态引用非静态方法
isSelected()
,Checkbox只是一个示例,请替换为变量的名称,例如jBoxNeuAnmeldung.isSelected()。注意jBoxNeuAnmeldung应该是对象的字段或final,否则不能引用它。如果您遇到此错误,您只需按原样复制,并尝试将复选框更正为复选框(因为小写复选框不是一种类型,因此会出现未定义的错误,而不是静态引用错误)。我已将答案扩展为更具体的答案,很高兴您能找到答案!事实上类似,您只是在FXML中连接完全相同的事件,而不是使用setOnAction显式设置此事件的处理程序)
@FXML
  public CheckBox checkBoxNeuAnmeldung;

  @FXML
  public void handleCheckBoxNeuAnmeldungAction(ActionEvent event) {
    if (checkBoxNeuAnmeldung.isSelected()) {
      neuAnmeldung = true;
    } else
      neuAnmeldung = false;
    System.out.println("Neu-Anmeldung Checkbox angekreutzt? " + neuAnmeldung);
  }