我正在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>
答案 0 :(得分:3)
不确定这是否会奏效,因为我不熟悉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内容。
答案 1 :(得分:2)
避免使用类似这样的switch
语句。仅将相同的事件处理程序用于功能非常相似的功能。否则,最好使用不同的事件处理程序。
在这种情况下,功能足够相似。我建议仍然避免使用switch
。一个很好的方法是将一些数据附加到源。通常,您会使用userData
属性或properties
映射,但是在这种情况下,您不需要使用此属性,因为可以通过text
属性获取信息:
@FXML
private void onNumberButtonClick(ActionEvent e) {
Button source = (Button) e.getSource();
appendText(source.getText());
}
答案 2 :(得分:0)
像什么?
fileB.c