更改警报框JavaFX中的光标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更改警报框JavaFX中的光标相关的知识,希望对你有一定的参考价值。

嗨我正在尝试更改光标,在单击按钮类型后,在按下sceneHome按钮时显示的JavaFX警报中。

这是当用户按下sceneHome中的按钮时调用的函数:

public void export() {
    Alert alert = new Alert(AlertType.CONFIRMATION);
    alert.setTitle("Export menu");
    alert.setHeaderText("Wat wilt u exporteren, adressen of ritten?");
    alert.setContentText("Maak een keuze.");
    ButtonType buttonTypeOne = new ButtonType("Adressen");
    ButtonType buttonTypeTwo = new ButtonType("Ritten");
    ButtonType buttonTypeCancel = new ButtonType("Annuleren", ButtonData.CANCEL_CLOSE);

    alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeTwo, buttonTypeCancel);

    Optional<ButtonType> result = alert.showAndWait();
    if (result.get() == buttonTypeOne){
        //scene.setCursor(Cursor.WAIT);
        ToCSV.export("adressen");
        //scene.setCursor(Cursor.DEFAULT);
    } else if (result.get() == buttonTypeTwo) {
        //scene.setCursor(Cursor.WAIT);                
        ToCSV.export("ritten");
        //scene.setCursor(Cursor.DEFAULT);
    } else{
        //do nothing
    }
}

如果我说sceneHome.setCursor(Cursor.WAIT)没有任何反应,如果我说alert.getDialogPane().getScene().setCursor(Cursor.WAIT)我得到一个NullPointerException ...

那么我应该传递哪个场景(在//scene.setCursor(Cursor.DEFAULT);//scene.setCursor(Cursor.WAIT);)?

答案

看起来你的ToCSV.export调用实际上阻止程序更改光标。尝试在单独的Task中运行此方法:

private static void export(Scene scene) {
    Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    alert.setTitle("Export menu");
    alert.setHeaderText("Wat wilt u exporteren, adressen of ritten?");
    alert.setContentText("Maak een keuze.");
    ButtonType buttonTypeOne = new ButtonType("Adressen");
    ButtonType buttonTypeTwo = new ButtonType("Ritten");
    ButtonType buttonTypeCancel = new ButtonType("Annuleren", ButtonBar.ButtonData.CANCEL_CLOSE);
    alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeTwo, buttonTypeCancel);
    Optional<ButtonType> result = alert.showAndWait();
    if (result.get() == buttonTypeOne){
        scene.setCursor(Cursor.WAIT);
        final Task<Void> task = new Task<Void>() {
            @Override
            protected Void call() throws Exception {
                ToCSV.export("adressen");
                return null;
            }
            @Override
            protected void succeeded() {
                scene.setCursor(Cursor.DEFAULT);
            }
        };
        new Thread(task).start();
    } else if (result.get() == buttonTypeTwo) {
        //
    } else{
        //do nothing
    }
}

scene是打开此对话框的按钮所在的位置。

理想情况下,为了清洁代码,您应该使用此逻辑创建一个单独的ToCSVTask类并将其提交给ExecutorService - 您可以谷歌以最干净的方式来执行此操作。

以上是关于更改警报框JavaFX中的光标的主要内容,如果未能解决你的问题,请参考以下文章

AlertDialog 更改片段中的背景颜色 [重复]

如何检查鼠标光标是不是在 Javafx 中的按钮上?

JavaFX自定义窗口标题栏

JavaFX 警报及其大小

javafx KeyEvent触发两次

为 iphone 移动网络定制的警报框