JavaFx - 在alert dialg中包装内容文本

时间:2016-02-29 06:26:50

标签: java user-interface javafx

如何在警告对话框中设置wraptext选项?我试着这样做:

Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.getButtonTypes().set(0, ButtonType.NO);
alert.getButtonTypes().set(1, ButtonType.YES);
alert.getDialogPane().getStylesheets().add("/styles/style.css");
alert.setGraphic(new ImageView(getIcon(icon)));
Label lb = (Label) alert.getDialogPane().getChildren().get(1);
lb.setWrapText(true); //Attempt to set wrapText option
alert.setTitle(title);
alert.setHeaderText(header);
alert.setContentText(content);

但它不起作用。

2 个答案:

答案 0 :(得分:6)

改为创建一个新标签,并将其设置为DialogPane的内容:

Label label = new Label("Label with\nText that should be wrapped.");
label.setWrapText(true);
alert.getDialogPane().setContent(lb);

请记住,WrapText仅包含在行结尾字符(\ n)上,而不是自动包含。

如果要自动换行,请改用Text元素并设置WrappingWidth属性:

Text text = new Text("Very long text that should be wrapped in the dialog");
text.setWrappingWidth(100);
alert.getDialogPane().setContent(text);

答案 1 :(得分:1)

我发现必须输入所有这些令人沮丧,并且使用Text不提供任何填充,所以我在实用程序库中使用类似的东西:

public static Alert createAlert(Alert.AlertType type, String message) {
    Alert alert = new Alert(type);

    StringBuilder sb = new StringBuilder(message);
    for (int i = 0; i < message.length(); i += 200) {
        sb.insert(i, "\n");
    }

    Label t = new Label(sb.toString());
    alert.getDialogPane().setContent(t);
    return alert;
}

使用起来更合理:

Alert alert = FxUtil.createAlert(Alert.AlertType.ERROR, ex.getMessage());
alert.show();

如果它自动完成这样的事情会很好......切断这种性质的信息是没有用的:

我收到一条错误消息。它说:“在行号上解析错误......”任何想法出了什么问题?