JavaFX:设置所有按钮类型后,无法更改警报确定按钮文本

时间:2018-10-09 15:49:04

标签: java javafx

我发现了一些奇怪的行为,我无法找出原因。

出现“确定”和“取消”的警报,我正在查找按钮类型以更改其文本。

如果我在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之前尝试失败,因为考虑到它最初在Alert ERROR上不存在。

一个示例应用程序。我一直在用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);
            }
        });
    }

}

0 个答案:

没有答案