From edf574c0af7e9ac6db5f395dd96b216c213a90fb Mon Sep 17 00:00:00 2001 From: octopus_yan Date: Sun, 8 Sep 2024 01:30:51 +0800 Subject: [PATCH] =?UTF-8?q?pref:=20=E4=BF=AE=E6=94=B9Alert=E5=B7=A5?= =?UTF-8?q?=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/octopusyan/alistgui/Application.java | 2 +- .../alistgui/util/alert/AlertBuilder.java | 39 +++++++++++++ .../alistgui/util/alert/BaseBuilder.java | 57 +++++++++++++++++++ .../alistgui/util/alert/ChoiceBuilder.java | 24 ++++++++ .../alistgui/util/alert/TextInputBuilder.java | 24 ++++++++ 5 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 src/main/java/cn/octopusyan/alistgui/util/alert/AlertBuilder.java create mode 100644 src/main/java/cn/octopusyan/alistgui/util/alert/BaseBuilder.java create mode 100644 src/main/java/cn/octopusyan/alistgui/util/alert/ChoiceBuilder.java create mode 100644 src/main/java/cn/octopusyan/alistgui/util/alert/TextInputBuilder.java diff --git a/src/main/java/cn/octopusyan/alistgui/Application.java b/src/main/java/cn/octopusyan/alistgui/Application.java index 6bd56c3..86e88f2 100644 --- a/src/main/java/cn/octopusyan/alistgui/Application.java +++ b/src/main/java/cn/octopusyan/alistgui/Application.java @@ -82,7 +82,7 @@ public class Application extends javafx.application.Application { private void showErrorDialog(Thread t, Throwable e) { logger.error("", e); - AlertUtil.exceptionAlert(new Exception(e)).show(); + AlertUtil.exception(new Exception(e)).show(); } @Override diff --git a/src/main/java/cn/octopusyan/alistgui/util/alert/AlertBuilder.java b/src/main/java/cn/octopusyan/alistgui/util/alert/AlertBuilder.java new file mode 100644 index 0000000..427dab9 --- /dev/null +++ b/src/main/java/cn/octopusyan/alistgui/util/alert/AlertBuilder.java @@ -0,0 +1,39 @@ +package cn.octopusyan.alistgui.util.alert; + +import javafx.scene.control.Alert; +import javafx.scene.control.ButtonType; +import javafx.stage.Window; + +import java.util.Optional; + +/** + * @author octopus_yan + */ +public class AlertBuilder extends BaseBuilder { + + public AlertBuilder(Alert alert, Window owner) { + super(alert, owner); + } + + /** + * AlertUtil.confirm + */ + public void show(AlertUtil.OnClickListener listener) { + Optional result = alert.showAndWait(); + result.ifPresent(r -> listener.onClicked(r.getText())); + } + + /** + * AlertUtil.confirm + */ + public void show(AlertUtil.OnChoseListener listener) { + Optional result = alert.showAndWait(); + result.ifPresent(r -> { + if (r == ButtonType.OK) { + listener.confirm(); + } else { + listener.cancelOrClose(r); + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/cn/octopusyan/alistgui/util/alert/BaseBuilder.java b/src/main/java/cn/octopusyan/alistgui/util/alert/BaseBuilder.java new file mode 100644 index 0000000..74e5654 --- /dev/null +++ b/src/main/java/cn/octopusyan/alistgui/util/alert/BaseBuilder.java @@ -0,0 +1,57 @@ +package cn.octopusyan.alistgui.util.alert; + +import javafx.scene.control.Dialog; +import javafx.scene.image.Image; +import javafx.stage.Stage; +import javafx.stage.Window; + +import java.util.Objects; + +/** + * @author octopus_yan + */ +public abstract class BaseBuilder, R> { + T alert; + + public BaseBuilder(T alert, Window mOwner) { + this.alert = alert; + if (mOwner != null) + this.alert.initOwner(mOwner); + } + + public BaseBuilder title(String title) { + alert.setTitle(title); + return this; + } + + public BaseBuilder header(String header) { + alert.setHeaderText(header); + return this; + } + + public BaseBuilder content(String content) { + alert.setContentText(content); + return this; + } + + public BaseBuilder icon(String path) { + return icon(new Image(Objects.requireNonNull(this.getClass().getResource(path)).toString())); + } + + public BaseBuilder icon(Image image) { + getStage().getIcons().add(image); + return this; + } + + public void show() { + if (alert.isShowing()) { + if (!Objects.equals(alert.getContentText(), alert.getContentText())) + alert.setOnHidden(_ -> show()); + } + alert.showAndWait(); + } + + private Stage getStage() { + return (Stage) alert.getDialogPane().getScene().getWindow(); + } +} diff --git a/src/main/java/cn/octopusyan/alistgui/util/alert/ChoiceBuilder.java b/src/main/java/cn/octopusyan/alistgui/util/alert/ChoiceBuilder.java new file mode 100644 index 0000000..0dcaf3d --- /dev/null +++ b/src/main/java/cn/octopusyan/alistgui/util/alert/ChoiceBuilder.java @@ -0,0 +1,24 @@ +package cn.octopusyan.alistgui.util.alert; + +import javafx.scene.control.ChoiceDialog; +import javafx.stage.Window; + +import java.util.Collection; +import java.util.Optional; + +/** + * @author octopus_yan + */ +public class ChoiceBuilder extends BaseBuilder, R> { + public ChoiceBuilder(ChoiceDialog alert, Window mOwner) { + super(alert, mOwner); + } + + /** + * AlertUtil.choices + */ + public R getChoice(Collection choices) { + Optional result = alert.showAndWait(); + return result.orElse(null); + } +} diff --git a/src/main/java/cn/octopusyan/alistgui/util/alert/TextInputBuilder.java b/src/main/java/cn/octopusyan/alistgui/util/alert/TextInputBuilder.java new file mode 100644 index 0000000..695b2ce --- /dev/null +++ b/src/main/java/cn/octopusyan/alistgui/util/alert/TextInputBuilder.java @@ -0,0 +1,24 @@ +package cn.octopusyan.alistgui.util.alert; + +import javafx.scene.control.TextInputDialog; +import javafx.stage.Window; + +import java.util.Optional; + +/** + * @author octopus_yan + */ +public class TextInputBuilder extends BaseBuilder{ + public TextInputBuilder(TextInputDialog alert, Window mOwner) { + super(alert, mOwner); + } + + /** + * AlertUtil.input + * 如果用户点击了取消按钮,将会返回null + */ + public String getInput() { + Optional result = alert.showAndWait(); + return result.orElse(null); + } +}