JavaFX警报及其大小

时间:2015-03-09 08:00:31

标签: java javafx dialog alert

最近,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 Alert Linux 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();
    }
}

5 个答案:

答案 0 :(得分:41)

我做了以下解决方法:

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

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

答案 1 :(得分:17)

这是没有幻数,调整大小等的更好的解决方法:

$scope.currentList.indexOf(deletedElement)

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

答案 2 :(得分:14)

我之前做过以下解决方法:

Alert dialog = new Alert(Alert.AlertType.ERROR);
dialog.setHeaderText("Connection Failed");
dialog.setContentText(this.getException().getMessage());

//FIXME: Remove after release 8u40
dialog.setResizable(true);
dialog.getDialogPane().setPrefSize(480, 320);

dialog.showAndWait();

正如您所看到的,我只是设置了可调整大小的标志并设置了首选大小。

但这很奇怪,因为8u40中的这个bug should be fixed。您使用的是最新版本的8u40吗?

<强>更新

8u40未修复。 Should be fixed之后。

答案 3 :(得分:1)

另一种解决方案是对Alert进行子类化并在那里应用所需的样式,例如:

<s:http use-expressions="true" entry-point-aref="delegatingAuthenticationEntryPoint">
    <s:form-login login-page="/auth/login"
                  login-processing-url="/auth/j_spring_security_check"
                  authentication-failure-url="/auth/login-secure?loginFailed=true"
                  default-target-url="/auth/defaultEntry"
                  always-use-default-target="true"/>
    <s:logout logout-url="/auth/logout" logout-success-url="/auth/logout-success" delete-cookies="jsessionid"/>
</s:http>

这样您就不必为您创建的每个警报重复操作。

答案 4 :(得分:0)

第15版仍然是唯一的解决方法:

dialog.setResizable(true);
dialog.getDialogPane().setPrefSize(377, 233);
Platform.runLater(() -> dialog.setResizable(false));