JavaFX:如何覆盖自定义对话框中的按钮操作
JavaFX: How to overwrite button action in custom Dialog
我在基于 JDK 8 和 JavaFX 的桌面应用程序上工作。
我创建了带有 2 个按钮(完成和取消)的自定义对话框 class。我的目标是 return 对话框中添加的字符串列表(单击完成按钮后,对话框 returns 列表。取消会使 return 为空列表)。
我有问题,因为函数 showAndWait return 我点击的按钮类型('ButtonType.FINISH' 或 'ButtonType.CANCEL')。我的目标是覆盖完成和关闭按钮上的默认操作,我想 return 列表而不是 return 按钮类型。
始终可以创建自定义按钮,但是,最好使用 JavaFX 已经提供的按钮。
作为响应,您可以使用任何 JVM 语言 (Java/Kotlin/Scala)。
代码:
class MyDialog : Dialog<MutableList<String>>() {
val listToReturn: MutableList<String> = mutableListOf()
init {
val dialogPane: DialogPane = this.dialogPane
dialogPane.buttonTypes.addAll(ButtonType.FINISH, ButtonType.CANCEL)
}
}
val myDialog: MyDialog = MyDialog()
// here I got ButtonType ('ButtonType.FINISH' or 'ButtonType.CANCEL'), not list of string
myDialog.showAndWait().ifPresent { list -> println(list) }
您需要使用结果转换器
public class MyDialog extends Dialog<List<String>> {
ArrayList<String> returnList = new ArrayList<>();
public MyDialog() {
returnList.add("test 1");
returnList.add("test 2");
this.getDialogPane().getButtonTypes().addAll(ButtonType.FINISH, ButtonType.CANCEL);
setResultConverter(dialogButton -> {
if (dialogButton == ButtonType.FINISH) {
return returnList;
}
return new ArrayList<>();
});
}
}
对于应用端
public class main extends Application {
public static void main (String [] args) {
launch();
}
@Override
public void start(Stage primaryStage) {
MyDialog myDialog = new MyDialog();
myDialog.showAndWait().ifPresent(System.out::println);
}
}
我在基于 JDK 8 和 JavaFX 的桌面应用程序上工作。
我创建了带有 2 个按钮(完成和取消)的自定义对话框 class。我的目标是 return 对话框中添加的字符串列表(单击完成按钮后,对话框 returns 列表。取消会使 return 为空列表)。
我有问题,因为函数 showAndWait return 我点击的按钮类型('ButtonType.FINISH' 或 'ButtonType.CANCEL')。我的目标是覆盖完成和关闭按钮上的默认操作,我想 return 列表而不是 return 按钮类型。
始终可以创建自定义按钮,但是,最好使用 JavaFX 已经提供的按钮。
作为响应,您可以使用任何 JVM 语言 (Java/Kotlin/Scala)。
代码:
class MyDialog : Dialog<MutableList<String>>() {
val listToReturn: MutableList<String> = mutableListOf()
init {
val dialogPane: DialogPane = this.dialogPane
dialogPane.buttonTypes.addAll(ButtonType.FINISH, ButtonType.CANCEL)
}
}
val myDialog: MyDialog = MyDialog()
// here I got ButtonType ('ButtonType.FINISH' or 'ButtonType.CANCEL'), not list of string
myDialog.showAndWait().ifPresent { list -> println(list) }
您需要使用结果转换器
public class MyDialog extends Dialog<List<String>> {
ArrayList<String> returnList = new ArrayList<>();
public MyDialog() {
returnList.add("test 1");
returnList.add("test 2");
this.getDialogPane().getButtonTypes().addAll(ButtonType.FINISH, ButtonType.CANCEL);
setResultConverter(dialogButton -> {
if (dialogButton == ButtonType.FINISH) {
return returnList;
}
return new ArrayList<>();
});
}
}
对于应用端
public class main extends Application {
public static void main (String [] args) {
launch();
}
@Override
public void start(Stage primaryStage) {
MyDialog myDialog = new MyDialog();
myDialog.showAndWait().ifPresent(System.out::println);
}
}