diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index 2610c91d3..ff159d5a8 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -710,6 +710,9 @@ public final class FXUtils { } public static List parseSegment(String segment, Consumer hyperlinkAction) { + if (segment.indexOf('<') < 0) + return Collections.singletonList(new Text(segment)); + try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java index 97b7a3857..0dcbe3107 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java @@ -23,8 +23,12 @@ import javafx.fxml.FXML; import javafx.scene.Node; import javafx.scene.control.ButtonBase; import javafx.scene.control.Label; +import javafx.scene.control.ScrollPane; import javafx.scene.layout.HBox; +import javafx.scene.layout.Priority; import javafx.scene.layout.StackPane; +import javafx.scene.layout.VBox; +import javafx.scene.text.TextFlow; import org.jackhuang.hmcl.setting.Theme; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.FXUtils; @@ -69,7 +73,17 @@ public final class MessageDialogPane extends StackPane { public MessageDialogPane(@NotNull String text, @Nullable String title, @NotNull MessageType type) { FXUtils.loadFXML(this, "/assets/fxml/message-dialog.fxml"); - content.getChildren().setAll(FXUtils.segmentToTextFlow(text, Controllers::onHyperlinkAction)); + EnhancedTextFlow textFlow = new EnhancedTextFlow(); + textFlow.getChildren().setAll(FXUtils.parseSegment(text, Controllers::onHyperlinkAction)); + + if (textFlow.computePrefHeight(400.0) <= 350.0) + content.getChildren().setAll(textFlow); + else { + ScrollPane scrollPane = new ScrollPane(textFlow); + VBox.setVgrow(scrollPane, Priority.ALWAYS); + scrollPane.setFitToWidth(true); + content.getChildren().setAll(scrollPane); + } if (title != null) this.title.setText(title); @@ -114,6 +128,13 @@ public final class MessageDialogPane extends StackPane { return cancelButton; } + private static final class EnhancedTextFlow extends TextFlow { + @Override + public double computePrefHeight(double width) { + return super.computePrefHeight(width); + } + } + public static class Builder { private final MessageDialogPane dialog; diff --git a/HMCL/src/main/resources/assets/fxml/message-dialog.fxml b/HMCL/src/main/resources/assets/fxml/message-dialog.fxml index 6c0be25e8..5fff367e7 100644 --- a/HMCL/src/main/resources/assets/fxml/message-dialog.fxml +++ b/HMCL/src/main/resources/assets/fxml/message-dialog.fxml @@ -1,38 +1,24 @@ - - - - - -
- - - - - - - - - - - - - - - - -
- - - -
+ +