Проблемы с вызовом метода (Сапер)

Сейчас я сталкиваюсь с проблемой, когда я думаю, что моя главная задача - выполнять метод снова и снова, а не один раз. Лучше, если я объясню это на примере. Я уже был в состоянии запрограммировать игру Сапер. Но я написал все это в одном классе ГЛАВНАЯ. На этот раз я пытаюсь сделать это снова, но используя методы и классы, ради практики и лучшего обзора. Как вы можете видеть, в моих вычислениях классов я пытаюсь создать массив меток. В моем Main я пытаюсь добавить все метки из массива в GridPane. Так как это тральщик, я должен добавить также случайные бомбы, которые в моем примере будут обозначаться буквой "Х". Я сделал этот маленький тест, если он работает lbs[10].setText("x"), просто чтобы посмотреть, работает ли он. Это не так. Он установит текст ВСЕХ меток в X после вызова этого метода! Я также хочу установить событие onMouseClicked в этом классе. Буду признателен за любую помощь и спасибо за ваше время, чтобы прочитать это. Я окружил коды хэштегом -> ######

//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;


}
}

1 ответ

Решение

Это потому, что все элементы в массиве lbs указать на тот же ярлык label,

Итак, когда вы устанавливаете текст любого "x"меняет текст label, что, собственно, каждый лейбл.

Измените эту строку в цикле:

lbs[i] = label;

чтобы:

lbs[i] = new Label();
Другие вопросы по тегам