Java 如何将二维数组填充为相同的值
我希望我的网格上的所有按钮都从空白变为X到O,然后每次单击都变回空白。它当前仅适用于数组中的第一个元素,因为I和j的值都是0。我是否需要一个类似于初始化按钮的循环 我认为这两个嵌套的for循环是我需要添加的,但是我已经尝试过了,并且成功了Java 如何将二维数组填充为相同的值,java,javafx,Java,Javafx,我希望我的网格上的所有按钮都从空白变为X到O,然后每次单击都变回空白。它当前仅适用于数组中的第一个元素,因为I和j的值都是0。我是否需要一个类似于初始化按钮的循环 我认为这两个嵌套的for循环是我需要添加的,但是我已经尝试过了,并且成功了 有什么建议吗?您可以定义单个事件处理程序并将其分配给循环中的所有按钮 EventHandler<ActionEvent> eventHandler = new EventHandler<ActionEvent>() {
有什么建议吗?您可以定义单个事件处理程序并将其分配给循环中的所有按钮
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);
}
}
EventHandler EventHandler=neweventhandler(){
@凌驾
公共无效句柄(ActionEvent事件){
Button Button=(Button)event.getSource();
开关(button.getText()){
案例“”:
按钮设置文本(“X”);
打破
案例“X”:
按钮。设置文本(“O”);
打破
违约:
按钮。setText(“”);
打破
}
}
};
//两个FOR循环用于创建具有值i、j的按钮的二维数组
对于(inti=0;i,可以定义单个事件处理程序并将其分配给循环中的所有按钮
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);
}
}
EventHandler EventHandler=neweventhandler(){
@凌驾
公共无效句柄(ActionEvent事件){
Button Button=(Button)event.getSource();
开关(button.getText()){
案例“”:
按钮设置文本(“X”);
打破
案例“X”:
按钮。设置文本(“O”);
打破
违约:
按钮。setText(“”);
打破
}
}
};
//两个FOR循环用于创建具有值i、j的按钮的二维数组
对于(int i=0;i您使用最终字段i
和j
来设置事件处理程序。如果您希望所有按钮都以相同的方式处理单击,则需要将事件处理程序注册到每个按钮
由于您只能有效地访问循环中的最终变量,因此需要创建循环变量的最终副本,或者只需为按钮
声明一个局部变量
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);
}
}
final List value=Arrays.asList(“,“X”,“O”);
对于(int i=0;i您使用最终字段i
和j
来设置事件处理程序。如果您希望所有按钮都以相同的方式处理单击,则需要将事件处理程序注册到每个按钮
由于您只能有效地访问循环中的最终变量,因此需要创建循环变量的最终副本,或者只需为按钮
声明一个局部变量
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);
}
}
final List value=Arrays.asList(“,“X”,“O”);
对于(inti=0;iYou可以使用:for(Foo[]数组:my2dArray){Arrays.fill(array,someValue);}
在我的程序中它会去哪里?忘记那个注释。你需要使用不同的按钮实例。所以每个数组位置都有一个不同的实例?每个要添加到场景中的按钮都有一个不同的实例。你不能多次将同一节点添加到场景中。你可以使用:for(Foo[]数组:my2dArray){Arrays.fill(数组,someValue);}
在我的程序中它会去哪里?忘记那个注释。你需要使用不同的按钮实例。所以每个数组位置都有一个不同的实例?每个要添加到场景中的按钮都有一个不同的实例。你不能多次将同一个节点添加到场景中。这是一个JavaFX问题。但不管t、 为什么要这样做?您可以将事件处理程序添加到创建它们的循环中的每个按钮上,并避免事件源中令人难堪的降级。@James_D将JButton更改为button.My bad。@James_D与您的其他语句相关联……您可以在自己的类中定义匿名事件处理程序,并在loo中创建新实例p(你在这一点上是对的)。正如您所发现的,我来自Swing,简单的向下投射中没有这种丑陋。这是一个主观的问题。这是一个JavaFX问题。但不管怎样,为什么要这样做?您可以将事件处理程序添加到创建它们的循环中的每个按钮中,并避免从事件源进行丑陋的向下投射。@James_D将JButton更改为B“utton.My bad.@James_D与您的其他语句相关……您可以在自己的类中定义匿名事件处理程序,并在循环中创建一个新实例(这一点您是对的)”.正如你所发现的,我来自Swing,在一次简单的沮丧中没有那么丑陋。那是主观的感觉。太好了!谢谢你的帮助!太好了!谢谢你的帮助!