Как получить текст от кнопки переключения в javafx - PullRequest
0 голосов
/ 09 января 2019

Я новичок в JavaFX. Я работаю над проектом бронирования фильмов. Я пытался извлечь текст из кнопки переключения после его зацикливания, но я не вижу метод getText (). Есть ли способ получить текст от переключателя.

Вот мой код:

package theatre;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.GridPane;

import java.net.URL;
import java.util.ResourceBundle;

public class TheatreController implements Initializable {

@FXML
private GridPane middleGridPane;

private final int MAX_ROW = 5;
private final int MAX_COL = 5;

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
    int countRow = 1;
    ToggleButton[][] seats = new ToggleButton[MAX_ROW][MAX_COL];

    char lastRow = 'A' + (MAX_ROW - 1);

    for(char row = 'A'; row < lastRow; row++){
        for (int col = 1; col < MAX_COL; col++){
            seats[countRow][col] = new ToggleButton(String.format(row + "%02d", col));
            seats[countRow][col].setPrefWidth(50);
            middleGridPane.add(seats[countRow][col], countRow, col);
            seats[countRow][col].setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    // Can't get text from here
                    event.getEventType().getName();
                }
            });

        }
        countRow++;
    }
}

@FXML
public void bookSeat(){

}
}

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Если вы хотите, чтобы значение ассоциировалось с ToggleButton, вы должны использовать метод setUserData для кнопок. Затем его можно получить обратно, используя метод getUserData.

0 голосов
/ 09 января 2019

Любая переменная, которую вы используете в handle() из EventHandler, должна быть final или , по сути, Finel .

Вот решение вашей проблемы:

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.GridPane;
import java.net.URL;
import java.util.ResourceBundle;

public class TheatreController implements Initializable {

    @FXML
    private GridPane middleGridPane;

    private final int MAX_ROW = 5;
    private final int MAX_COL = 5;

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        int countRow = 1;
        ToggleButton[][] seats = new ToggleButton[MAX_ROW][MAX_COL];

        char lastRow = 'A' + (MAX_ROW - 1);

        for(char row = 'A'; row < lastRow; row++){
            for (int col = 1; col < MAX_COL; col++){
                seats[countRow][col] = new ToggleButton(String.format(row + "%02d", col));
                seats[countRow][col].setPrefWidth(50);
                middleGridPane.add(seats[countRow][col], countRow, col);

                //effectively final variable to use in handle method of EventHandler
                int finalCountRow = countRow;
                int finalCol      = col;

                seats[countRow][col].setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent event) {

                        //now you can get text from seats[finalCountRow][finalCol]
                        System.out.println(seats[finalCountRow][finalCol].getText());
                        event.getEventType().getName();
                    }
                });
            }
            countRow++;
        }
    }

    @FXML
    public void bookSeat(){

    }
}
0 голосов
/ 09 января 2019

Зачем вам получать текст от переключателя? В любом случае, он имеет только два состояния, истинное или ложное. Мы можем использовать состояния, чтобы сделать вывод автоматически. Кнопки переключения показывают только состояние, но не могут дать текст.

Если вы специально держите текст, вы, вероятно, должны использовать раскрывающийся список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...