Проблемы с вызовом метода (Сапер)
Сейчас я сталкиваюсь с проблемой, когда я думаю, что моя главная задача - выполнять метод снова и снова, а не один раз. Лучше, если я объясню это на примере. Я уже был в состоянии запрограммировать игру Сапер. Но я написал все это в одном классе ГЛАВНАЯ. На этот раз я пытаюсь сделать это снова, но используя методы и классы, ради практики и лучшего обзора. Как вы можете видеть, в моих вычислениях классов я пытаюсь создать массив меток. В моем 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();