设置多个按钮- javaFX



我正在用java做一些纸牌游戏。我使用javaFX的用户界面,但我有一个小问题。我有25个按钮,我想添加文本到所有这些。我已经这样做了,但是代码很丑而且很长。我用scenebuilder创建了一个按钮,每个按钮都有唯一的id,从1到25。有没有办法缩短这个代码?

@FXML
Button card1;
@FXML
Button card2;
@FXML
Button card3;
@FXML
Button card4;
@FXML
Button card5;
@FXML
Button card6;
@FXML
Button card7;
@FXML
Button card8;
@FXML
Button card9;
@FXML
Button card10;
@FXML
Button card11;
@FXML
Button card12;
@FXML
Button card13;
@FXML
Button card14;
@FXML
Button card15;
@FXML
Button card16;
@FXML
Button card17;
@FXML
Button card18;
@FXML
Button card19;
@FXML
Button card20;
@FXML
Button card21;
@FXML
Button card22;
@FXML
Button card23;
@FXML
Button card24;
@FXML
Button card25;
@FXML
public void initialize(){
Board board = new Board();
board.createBoard();
card1.setText(board.getListFields().get(0).getWord().name());
card2.setText(board.getListFields().get(1).getWord().name());
card3.setText(board.getListFields().get(2).getWord().name());
card4.setText(board.getListFields().get(3).getWord().name());
card5.setText(board.getListFields().get(4).getWord().name());
card6.setText(board.getListFields().get(5).getWord().name());
card7.setText(board.getListFields().get(6).getWord().name());
card8.setText(board.getListFields().get(7).getWord().name());
card9.setText(board.getListFields().get(8).getWord().name());
card10.setText(board.getListFields().get(9).getWord().name());
card11.setText(board.getListFields().get(10).getWord().name());
card12.setText(board.getListFields().get(11).getWord().name());
card13.setText(board.getListFields().get(12).getWord().name());
card14.setText(board.getListFields().get(13).getWord().name());
card15.setText(board.getListFields().get(14).getWord().name());
card16.setText(board.getListFields().get(15).getWord().name());
card17.setText(board.getListFields().get(16).getWord().name());
card18.setText(board.getListFields().get(17).getWord().name());
card19.setText(board.getListFields().get(18).getWord().name());
card20.setText(board.getListFields().get(19).getWord().name());
card21.setText(board.getListFields().get(20).getWord().name());
card22.setText(board.getListFields().get(21).getWord().name());
card23.setText(board.getListFields().get(22).getWord().name());
card24.setText(board.getListFields().get(23).getWord().name());
card25.setText(board.getListFields().get(24).getWord().name());
}```

大家都说应该在java中而不是在fxml中创建这些项

public class Main extends Application {
@Override
public void start(Stage primaryStage) {
GridPane gridPane = new GridPane();
//This is so you can access them later
ArrayList<Button> buttonList = new ArrayList<>();
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
Button button = new Button();
button.setText("Card:"+i*j);
button.setPrefSize(80,120);
//If you need to know what card it is add the below line
button.setId(String.valueOf(i*j));
buttonList.add(button);
gridPane.add(button, i, j);
}
}
Scene scene = new Scene(gridPane);
primaryStage.setScene(scene);
primaryStage.show();
}
}

您可以创建一个按钮列表,如下所示:

List<Button> buttons = Arrays.asList(card1, card2, card3, ..., card25);

然后遍历它:

for (int i = 0; i < buttons.size(); i++) {
buttons.get(i).setText(board.getListFields().get(i).getWorld().name());
}

最新更新