[英]how do I fill my 2d array to the same values
我希望網格上的所有按鈕在每次單擊時都從空白變為X到O,然后又變為空白。 它當前僅適用於數組中的第一個元素,因為I和j的值都為0。是否需要一個類似於初始化按鈕位置的循環?
盡管我需要添加兩個嵌套的for循環,但是我已經嘗試過了,而且已經奏效。
有什么建議么?
您使用最終字段i
和j
用於設置事件處理程序。 如果希望所有按鈕都使用相同的方式處理單擊,則需要將事件處理程序注冊到每個按鈕。
由於您只能在循環內部有效地訪問最終變量,因此您需要對循環變量進行最終復制或僅聲明Button
的局部變量。
final List<String> values = Arrays.asList("", "X", "O");
for(int i=0; i<btn.length; i++){
for(int j=0; j<btn.length;j++){
final Button button = new Button("");
button.setOnAction(event -> {
int valueIndex = values.indexOf(button.getText());
button.setText(values.get((valueIndex+1) % values.size()));
});
// Initializing 2D buttons with values i,j
btn[i][j] = button;
button.setPrefSize(35, 40);
gridPane.add(button, i, j);
// button.setDisable(false);
}
}
您可以定義一個事件處理程序,並將其分配給循環中的所有按鈕
EventHandler<ActionEvent> eventHandler = new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Button button = (Button) event.getSource();
switch (button.getText()) {
case "":
button.setText("X");
break;
case "X":
button.setText("O");
break;
default:
button.setText("");
break;
}
}
};
//Two FOR loops used for creating 2D array of buttons with values i,j
for(int i=0; i<btn.length; i++){
for(int j=0; j<btn.length;j++){
// Initializing 2D buttons with values i,j
btn[i][j] = new Button();
btn[i][j].setPrefSize(35, 40);
gridPane.add(btn[i][j], i, j);
btn[i][j].setText("");
btn[i][j].setDisable(false);
btn[i][j].setOnAction(eventHandler);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.