在我的应用程序中,我需要显示警告/信息消息,但我不知道一种简单的方法,因为JavaFX上没有JOptionPane或类似的组件。
有一个Popup类,但你需要设置很多参数来获得一个简单的布局/位置/背景颜色/等等...所以我想知道是否有一个简单的,已经实现的组件如果JavaFX没有提供任何体面的东西,可能会在第三方库中显示消息。
提前感谢任何帮助/提示。
答案 0 :(得分:11)
ControlsFX是JavaFX 8所以我不能使用它,而其他替代方案几乎与我要做的事情的复杂程度相同。所以我实现了自己的方法来使用Popup显示信息/警告消息。
以下是我实施的源代码。只是进行一些调整以显示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;
}
弹出消息:
答案 1 :(得分:5)
使用ControlsFX dialog or notification pane。
另见How to create and show common dialog (Error, Warning, Confirmation) in JavaFX 2.0?
答案 2 :(得分:4)
使用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();
答案 3 :(得分:0)
ceklock answer的小改进
添加:
-无法通过点击
退出
-自动隐藏
-将弹出位置更改为窗口底部
-您不必在文件中查找阶段,可以传递任何控件视图(按钮,标签,容器或所需的内容)
只需致电:
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;
}