JavaFX: невозможно изменить текст кнопки оповещения о ОК после установки всех типов кнопок - PullRequest
0 голосов
/ 09 октября 2018

Я обнаружил странное поведение, не могу найти причину.

Предупреждение с OK и ОТМЕНА, я ищу типы кнопок, чтобы изменить их текст.

Если я ищукнопка ОК после alert.getButtonTypes (). setAll, текст не изменяется.Однако, если я посмотрю его раньше, то он будет изменен.

Работает:

    final Button test1Button = (Button) alert.getDialogPane().lookupButton(ButtonType.OK);
    test1Button.setText("Test1");

    alert.getButtonTypes().setAll(ButtonType.OK, ButtonType.CANCEL);

Не работает:

    alert.getButtonTypes().setAll(ButtonType.OK, ButtonType.CANCEL);

    final Button test1Button = (Button) alert.getDialogPane().lookupButton(ButtonType.OK);
    test1Button.setText("Test1");


Я мог бы поклясться, что это имеетработал ранее.Я только недавно заметил, что текст был неправильным.

Вторая кнопка ОТМЕНА прекрасно работает, изменяя текст после поиска.На самом деле произойдет сбой, если я попытаюсь до setAll, учитывая, что он изначально не существует в ОШИБКЕ оповещения.

Пример приложения.Я работал с Java 8u182.

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class TestApplication extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        alert();

        StackPane root = new StackPane();
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.setTitle("TestApplication");
        primaryStage.show();

    }

    private void alert() {
        final Alert alert = new Alert(AlertType.ERROR);
        alert.setContentText("Message");
        alert.setHeaderText("Alert");

        final Button test1Button = (Button) alert.getDialogPane().lookupButton(ButtonType.OK);
        test1Button.setText("Test1");

        alert.getButtonTypes().setAll(ButtonType.OK, ButtonType.CANCEL);

        final Button test2Button = (Button) alert.getDialogPane().lookupButton(ButtonType.CANCEL);
        test2Button.setText("Test2");

        alert.showAndWait().ifPresent(response -> {
            if (response == ButtonType.OK) {
                alert();
            } else {
                Platform.setImplicitExit(true);
            }
        });
    }

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