JavaFX 用更少的代码检测按钮点击

标签 java javafx

我在 JavaFX 中创建了很多按钮,我试图使代码更短。我尝试使用 switch 语句,但遗憾的是没有结果,因为我收到错误: constant expression required

Object source = e.getSource();
    switch (source) {
        case equals(leftPerent):
            appendText("(");
        default:
            break;
}

我当前的工作代码只是编写了大量的 if 语句,是否可以缩短它?

@FXML
private Button num1, num2, num3;

public void onNumberButtonClick(ActionEvent e) {
    if (e.getSource().equals(num1)) {
        appendText("1");
    }
    if (e.getSource().equals(num2)) {
        appendText("2");
    }
    if (e.getSource().equals(num3)) {
        appendText("3");
    }
}

FXML 文件:

<Button text="1" fx:id="num1" onAction="#onNumberButtonClick" GridPane.columnIndex="0" GridPane.rowIndex="0" alignment="CENTER"></Button>
<Button text="2" fx:id="num2" onAction="#onNumberButtonClick" GridPane.columnIndex="1" GridPane.rowIndex="0"></Button>
<Button text="3" fx:id="num3" onAction="#onNumberButtonClick" GridPane.columnIndex="2" GridPane.rowIndex="0"></Button>

最佳答案

不确定这是否有效,因为我不熟悉 FXML 以及 FXML ID 是否与以编程方式分配的 ID 相同。

public void onButtonClick(ActionEvent e) {
        Button button = (Button) e.getSource();
        String id = button.getId();

        switch (id) {
            case "num1": {
                appendText("1");
            }break;
            {.. etc ?..}
        }
    }

以编程方式执行此操作时,我通常会得到:

Button one = new Button();
one.setOnAction(e->{appendText("1");});

但是,我不知道以编程方式分配事件处理程序是否会破坏任何 FXML 内容。

关于JavaFX 用更少的代码检测按钮点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55696568/

相关文章:

java - 为我的 Tree CellRenderer 设置背景颜色时出现问题

java - Type ChangeListener 不带参数

java - 将 AllArgsConstructor 与 Spring 注释参数一起使用

java - JUnit 测试。使用ModelMapper库将entity转换为DTO时出现的问题

java - 如何让我的 StackPane 占据窗口的整个垂直高度?

JavaFX 绑定(bind)仅在调整窗口大小后应用

java - 如何使 JavaFX ListView 中的前 2 行不可选择

java - 在 Java fxml 应用程序中为动态创建的 Text 对象应用鼠标单击监听器

Java Path Files.copy 重命名(如果存在)

java - 不使用 Math.BigInteger 的高幂模