【问题标题】:How to implement the MouseListener from Swing in JavaFX如何在 JavaFX 中从 Swing 实现 MouseListener
【发布时间】:2016-12-03 00:39:43
【问题描述】:

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

无论何时选中/取消选中“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 做同样的事情?

【问题讨论】:

    标签: java eclipse swing javafx event-handling


    【解决方案1】:
        ...
        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 表达式中使用时,您也可以在 CheckBox 中省略 final)。

    【讨论】:

    • 不起作用!无法从 CheckBox 类型对非静态方法 isSelected() 进行静态引用
    • checkBox 只是一个示例,替换为您的变量名称,例如jBoxNeuAnmeldung.isSelected()。注意 jBoxNeuAnmeldung 应该是 object 的 field 或者 final,否则不能引用。如果您收到此错误,您只需按原样复制并尝试将 checkBox 更正为 CheckBox(因为小写复选框不是一种类型,因此会给出未定义的错误而不是静态引用错误)。
    • 我已将答案扩展为更具体
    • 很高兴你知道了!实际上它是相似的,您只是在 FXML 中连接完全相同的事件,而不是使用 setOnAction 显式设置此事件的处理程序)
    【解决方案2】:

    通过将ChangeListener 添加到selected 属性

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

    【讨论】:

      【解决方案3】:
      @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);
        }
      

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

      【讨论】:

        猜你喜欢
        • 2020-07-24
        • 2015-07-11
        • 2013-02-19
        • 1970-01-01
        • 2014-01-06
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        相关资源
        最近更新 更多