更改警告框 JavaFX 中的光标
Changing the cursor in an alertbox JavaFX
您好,我正在尝试在 JavaFX 警报中更改光标,该警报会在按下 sceneHome
中的按钮后,单击按钮类型后显示。
这是当用户按下 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
class 并将其提交给 ExecutorService - 您可能 google 最干净的如何做到这一点。
您好,我正在尝试在 JavaFX 警报中更改光标,该警报会在按下 sceneHome
中的按钮后,单击按钮类型后显示。
这是当用户按下 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
class 并将其提交给 ExecutorService - 您可能 google 最干净的如何做到这一点。