Обмен сценами с помощью кнопок, сгенерированных с помощью петель. (JavaFX) - PullRequest
0 голосов
/ 08 мая 2018

Я генерирую Buttons со следующим кодом:

public static void addSitesButton() {

        Button buttons[] = new Button[CsvScanner.numberOfLines + 1];

        for (int i = 0; i < CsvScanner.numberOfLines && i< 19; i++) {
            buttons[i] = new Button();
            addPages(i, buttons[i]);
        }
    }

метод addPages() имеет

button.setOnAction(e -> {
        button.setTextFill(Color.CRIMSON);
         buttonClicked = (((Button) e.getSource()).getText());
    });

с этим я получаю только номер кнопки, которую я создал.

С этим кодом я генерирую необходимые Scene и Grid.

public static void createGrids() {

    GridPane gridArray[] = new GridPane[buttonCounter];
    Scene sceneArray[] = new Scene[buttonCounter];
    for (int i = 0; i < buttonCounter; i++) {
        gridArray[i] = new GridPane();
        sceneArray[i] = new Scene(gridArray[i]);
    }
}

Мне нужно изменить Scene с созданным Buttons. Например: Первая кнопка должна перейти к первой сцене в массиве. Я понятия не имею, как этого добиться.

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Если текст вашей кнопки не содержит значения int, вы можете записать их индексы массива как AccessibleText

for (int i = 0; i < CsvScanner.numberOfLines && i< 19; i++) {
       buttons[i] = new Button();
       buttons[i].setAccessibleText(i+"");
       addPages(i, buttons[i]);
}

А потом

button.setOnAction(e -> {
    button.setTextFill(Color.CRIMSON);
    int buttonClicked = Integer.parse((((Button) e.getSource()).getAccessibleText()));
    stage.setScene(sceneArray[buttonClicked]);
});
0 голосов
/ 08 мая 2018

Вы можете записать значение, относящееся к кнопке, в userData при создании кнопки и обращаться к этому сохраненному значению, когда у вас есть ссылка на кнопку.

Например, записать пользовательские данные при создании кнопки:

buttons[i] = new Button();
buttons[i].setUserData(i);

А затем, когда вам нужно получить к нему доступ, извлеките данные пользователя, которые вы сохранили:

button.setOnAction(e -> {
    int buttonIndex = (int) button.getUserData();
    // do whatever you need to with button index...
});

Если вам нужно связать несколько частей данных с данным узлом, тогда вы можете использовать API node.getProperties(), но, для вашего вопроса, использование свойства узла userData, вероятно, все тебе нужно.

Мне нужно изменить сцену с созданными кнопками. Например: Первая кнопка должна перейти к первой сцене в массиве. Я понятия не имею, как это сделать.

Предполагая, что вы уже инициализировали массив сцен и пользовательские данные для своих кнопок, вы должны просто сделать:

button.setOnAction(e -> {
    int index = (int) button.getUserData();
    stage.setScene(sceneArray[index]);
});
0 голосов
/ 08 мая 2018

Если buttonClicked дает значение типа int, вы можете сделать.

button.setOnAction(e -> {
    button.setTextFill(Color.CRIMSON);
    int buttonClicked = Integer.parse((((Button) e.getSource()).getText()));
    stage.setScene(sceneArray[buttonClicked]);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...