Как я могу получить текст кнопки в JavaFX, если кнопка читается как узел? Цикл по группе / VBox кнопок. Возвращает это как узлы - PullRequest
0 голосов
/ 22 марта 2012

Я изучаю JavaFX, и это всего лишь маленький вопрос программирования.

У меня есть 3 кнопки в VBox.И я хочу применить те же 3 эффекта ко всем кнопкам после того, как я положил их в Vbox.Но когда я использую цикл for и getChildren () на VBox, они возвращаются как «узлы».Я не могу использовать Button.getText (), чтобы узнать текст кнопки.

Есть ли способ получить текст узла?Или, может быть, преобразовать текущий узел в кнопку и получить текст таким образом?

VBox vbox = new VBox();

Button option1 = new Button("Single Player");
Button option2 = new Button("Network Player");
Button option3 = new Button("View Rules");

vbox.getChildren().add(option1);
vbox.getChildren().add(option2);
vbox.getChildren().add(option3);

for (final Node button : vbox.getChildren()) {
    button.setOnMouseEntered(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent arg0) {
            button.setEffect(addEffect(Color.web("#53CFA6"), .8, 10));
        }
    });
    button.setOnMouseExited(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent arg0) {
            button.setEffect(addEffect(Color.web("#FF6800"), .8, 10));
        }
    });

    button.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent arg0) {
            button.setEffect(addEffect(Color.web("#E62800"), .8, 10));

            //Need to use button.getText()
            //Button button; button.getText() works

        }
    });
}

Ответы [ 2 ]

1 голос
/ 23 марта 2012

есть два варианта:

1.Преобразование типов. Легко, но не безопасно.

Если вы уверены, что не добавите других детей в этот VBox, вы можете просто преобразовать узел в кнопку:

for (Node node : vbox.getChildren()) {
    if (node instanceof Button) {
        final Button button = (Button) node;

        // all your logic
    }

2.Используйте шаблон Factory. Лучшие комплекты, ИМХО.

введите метод createButton, который будет настраивать кнопку по мере необходимости:

private Button createButton(String name) {
    final Button button = new Button(name);
    button.setOnMouseEntered(...);
    button.setOnMouseExited(...);
    button.setOnMouseClicked(...);
    return button;
}

, и ваш код будет выглядеть следующим образом:

Button option1 = createButton("Single Player");
Button option2 = createButton("Network Player");
Button option3 = createButton("View Rules");

vbox.getChildren().addAll(option1, option2, option3);

3.Представьте свой собственный класс кнопок. Лучше, если вы планируете расширить логику кнопок.

public void FancyButton extends Button {
    public FancyButton(String name) {
        super(name);
        //handlers logic here
    }
}
0 голосов
/ 23 января 2019

Вы можете получить текст от кнопки и присвоить его строковой переменной с помощью этого кода: -

String Val = ((Button)event.getSource()).getText();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...