我在 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/