【问题标题】:Problems with calling a Method (Minesweeper)调用方法的问题(扫雷)
【发布时间】:2016-06-01 00:35:15
【问题描述】:

我现在面临一个问题,我认为我的 main 正在一遍又一遍地执行一个方法,而不是一次。如果我根据一个例子来解释它会更好。我已经能够编写扫雷游戏了。但我把这一切都写在一个主课上。这一次我尝试再做一次,但使用方法和类,为了练习和更好的概述。 如您所见,在我的类计算中,我正在尝试创建一个标签数组。在我的 Main 中,我试图从 GridPane 中的数组中添加所有标签。由于它是一款扫雷游戏,我还必须添加随机炸弹,在我的示例中为“X”。我做了这个小测试,它是否有效 lbs[10].setText("x"),只是为了看看它是否有效。它没有。一旦调用此方法,它会将所有标签的文本设置为 X!我还想在这个类中设置一个 onMouseClicked 事件。我将不胜感激,并感谢您抽出时间阅读本文。我用 Hashtag 包围了代码 -> ######

//Main
package application;

import...


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            GridPane grid = new GridPane();

            Scene scene = new Scene(grid, (20 * 20), (20 * 20));
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();    

            for(int i = 0; i < 20; i++) {
                ColumnConstraints column = new ColumnConstraints(20);
                grid.getColumnConstraints().add(column);
                }

            for(int i = 0; i < 20; i++) {
                RowConstraints row = new RowConstraints(20);
                grid.getRowConstraints().add(row);
            }
            //#########################################################
            Calculations c = new Calculations();
            int count = 0;
            for (int x = 0; x < c.test().length/20; x++)
                {
                    for (int y = 0; y < c.test().length/20; y++)
                        {
                          grid.add(c.test()[count], x, y);
                          count++;
                        }
                }
         //#########################################################

               } catch(Exception e) {
            e.printStackTrace();

        }


    }



    public static void main(String[] args) {
        launch(args);
    }
    }

这里是我的“计算”课

package application;

import...

public class Calculations {

    public Label[] test() {

        Label label = new Label();
        Label lbs[] = new Label[20*20];
        int a = 0;
        for (int i = 0 ; i < 400; i++) {
        lbs[i] = label;
        }

lbs[10].setText("x"); //##### <- doesnt work the way it should be

        return lbs;


}
}

【问题讨论】:

    标签: java arrays methods javafx gridpane


    【解决方案1】:

    这是因为数组lbs中的所有元素都指向同一个标签label

    因此,当您将任何一个的文本设置为"x" 时,它会更改label 的文本,实际上是每个标签。

    在循环中更改这一行:

    lbs[i] = label;
    

    到:

    lbs[i] = new Label();
    

    【讨论】:

    • 非常感谢!这么简单的错误让我忙了好几天!你还知道如何在 Calculations 类中放置一个 onMouseClicked 事件吗?可以说,每当我单击应该发生某事的标签时,我都想要。假设标签文本将是“X”?我尝试了很多方法。最近我把它放在 For 循环代码中,但它不起作用: lbs[i].setOnMouseClicked(e -> { label.setText("X"); });
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多