再次按下按钮后,JavaFx中的警报位置更改为默认位置

问题描述 投票:0回答:1

我在特定位置单击按钮时显示警告消息。

我已经完成,但是当我第二次按下button时,位置更改为默认位置。

MessageController.java

 public class MessageController implements Initializable {

    Alert alert = new Alert(Alert.AlertType.INFORMATION);

    @FXML
    private void handleButtonAction(ActionEvent event) {
        alert.setTitle("Message");
        alert.setHeaderText("You clicked button");
        alert.show();
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        ((Stage) alert.getDialogPane().getScene().getWindow()).setX(50);
        ((Stage) alert.getDialogPane().getScene().getWindow()).setY(50);
    }

Message.fxml

<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" fx:controller="message.MessageController">
    <children>
        <Button layoutX="126" layoutY="90" text="Click Me!" onAction="#handleButtonAction" fx:id="button" />
    </children>
</AnchorPane>  

Message.java(主类)

public class Message extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Message.fxml"));

        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.show();
    }

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

}

如果我在方法内部显示警报的情况下使用setX和setY,则行为相同>>

private void handleButtonAction(ActionEvent event) {
    alert.setTitle("Message");
    alert.setHeaderText("You clicked button");
    ((Stage) alert.getDialogPane().getScene().getWindow()).setX(50);
    ((Stage) alert.getDialogPane().getScene().getWindow()).setY(50);
    alert.show();
}  

上面的代码第二次单击按钮后还会抛出NullPointerException

如何设置Alert的固定位置?

我在特定位置单击按钮时显示警告消息。我已经做完了,但是当我第二次按下按钮时,位置已更改为默认位置。 MessageController.java ...

javafx position alert
1个回答
0
投票

您可以通过使按钮成为对话框(而不是作为类成员)来创建对话框,从而实现您想要的结果,因此您的控制器看起来像这样

© www.soinside.com 2019 - 2024. All rights reserved.