JavaFX 警报及其大小

2022-09-01 02:21:34

最近,JavaFX推出了Alerts(Java 8u40)。

请考虑下面的代码示例。如何显示比几个单词更长的完整消息?我的消息(属性)在最后被剪切,并且在我看来,警报没有正确调整其大小。contentText...

在我装有Oracle JDK 8u40的Linux机器上,我只看到文本 ,在某些情况下太短了。This is a long text. Lorem ipsum dolor sit amet

当然,用户可以手动调整警报窗口的大小,并相应地显示文本,但这根本不是用户友好的。

编辑:Windows 7和Linux的屏幕截图(来自Oracle的JDK):Windows AlertLinux Alert

import javafx.application.Application;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.stage.Stage;


public class TestAlert extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        Alert a = new Alert(AlertType.INFORMATION);
        a.setTitle("My Title");
        a.setHeaderText("My Header Text");
        a.setResizable(true);
        String version = System.getProperty("java.version");
        String content = String.format("Java: %s.\nThis is a long text. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", version);
        a.setContentText(content);
        a.showAndWait();
    }
}

答案 1

我已采取以下解决方法:

Alert alert = new Alert(AlertType.INFORMATION, "Content here", ButtonType.OK);
alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
alert.show();

因此,窗口将根据内容自动调整大小。


答案 2

以下是更好的解决方法,无需幻数,调整大小等:

Alert alert = new Alert(AlertType.ERROR, "content text");
alert.getDialogPane().getChildren().stream().filter(node -> node instanceof Label).forEach(node -> ((Label)node).setMinHeight(Region.USE_PREF_SIZE));

此解决方案适用于Windows,Linux和Mac。


推荐