2

在我的应用程序中,我需要显示警告/信息消息,但我不知道一种简单的方法来做到这一点,因为 JavaFX 上没有 JOptionPane 或类似组件。

有一个 Popup 类,但是您必须设置许多参数才能为简单的消息获得合适的布局/位置/背景颜色/等...所以我想知道是否有一个简单的,已经实现的组件来显示消息,如果 JavaFX 没有提供任何像样的东西,可能在第三方库中。

提前感谢您的任何帮助/提示。

4

4 回答 4

12

ControlsFX 是 JavaFX 8,所以我不能使用它,而其他替代品的复杂程度几乎与我打算做的一样。所以我实现了自己的方法来使用Popup显示信息/警告消息。

这是我实现的源代码。只需进行一些调整以显示以窗口为中心的弹出窗口,使用 CSS 并在用户单击它时隐藏。

public static Popup createPopup(final String message) {
    final Popup popup = new Popup();
    popup.setAutoFix(true);
    popup.setAutoHide(true);
    popup.setHideOnEscape(true);
    Label label = new Label(message);
    label.setOnMouseReleased(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent e) {
            popup.hide();
        }
    });
    label.getStylesheets().add("/css/styles.css");
    label.getStyleClass().add("popup");
    popup.getContent().add(label);
    return popup;
}

public static void showPopupMessage(final String message, final Stage stage) {
    final Popup popup = createPopup(message);
    popup.setOnShown(new EventHandler<WindowEvent>() {
        @Override
        public void handle(WindowEvent e) {
            popup.setX(stage.getX() + stage.getWidth()/2 - popup.getWidth()/2);
            popup.setY(stage.getY() + stage.getHeight()/2 - popup.getHeight()/2);
        }
    });        
    popup.show(stage);
}


CSS:

.popup {
    -fx-background-color: cornsilk;
    -fx-padding: 10;
    -fx-border-color: black; 
    -fx-border-width: 5;
    -fx-font-size: 16;
}


弹出消息:

在此处输入图像描述

于 2013-09-08T19:52:23.057 回答
7

使用 Java 8u40 及更高版本,您无需担心。它有JavaFX 对话框

这是一个学习链接:http ://code.makery.ch/blog/javafx-dialogs-official/

就像这样简单:

Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle("Information Dialog");
alert.setHeaderText("Look, an Information Dialog");
alert.setContentText("I have a great message for you!");

alert.showAndWait();
于 2017-07-19T12:08:19.570 回答
5

使用ControlsFX 对话框或通知窗格

另请参阅如何在 JavaFX 2.0 中创建和显示通用对话框(错误、警告、确认)?

于 2013-09-07T04:25:42.677 回答
1

添加了ceklock 答案的小改进: -无法通过单击 关闭-自动隐藏-将 弹出位置更改为窗口底部 -您不必在文件中查找阶段,您可以传递任何控制视图(按钮、标签、容器或什么你想要) 只是打电话:







Toast.show("YEEEEEEEEEEE", anyControl);


import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.scene.control.Control;
import javafx.scene.control.Label;
import javafx.stage.Popup;
import javafx.stage.Stage;
import javafx.util.Duration;

    public class Toast {

        private static int TOAST_TIMEOUT = 1400;

        private static Popup createPopup(final String message) {
            final Popup popup = new Popup();
            popup.setAutoFix(true);
            Label label = new Label(message);
            label.getStylesheets().add("/css/mainStyles.css");
            label.getStyleClass().add("popup");
            popup.getContent().add(label);
            return popup;
        }

        public static void show(final String message, final Control control) {
            Stage stage = (Stage) control.getScene().getWindow();
            final Popup popup = createPopup(message);
            popup.setOnShown(e -> {
                popup.setX(stage.getX() + stage.getWidth() / 2 - popup.getWidth() / 2);
                popup.setY(stage.getY() + stage.getHeight() / 1.2 - popup.getHeight() / 2);
            });
            popup.show(stage);

            new Timeline(new KeyFrame(
                    Duration.millis(TOAST_TIMEOUT),
                    ae -> popup.hide())).play();
        }

CSS:

.popup {
    -fx-background-color: cornsilk;
    -fx-padding: 10;
    -fx-border-color: black; 
    -fx-border-width: 5;
    -fx-font-size: 16;
}
于 2018-10-18T12:37:19.930 回答