From bcaf3de164377d3f383fba51bfd49f05e7eba35c Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 22 Sep 2021 13:27:07 +0800 Subject: [PATCH] fix #1054: Avoid incorrect UI layout caused by long strings --- .../hmcl/ui/construct/MultiFileItem.java | 13 +++++++++++-- .../org/jackhuang/hmcl/util/StringUtils.java | 16 ++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java index e605b131e..2436d9589 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java @@ -29,6 +29,7 @@ import javafx.scene.Node; import javafx.scene.control.Label; import javafx.scene.control.Toggle; import javafx.scene.control.ToggleGroup; +import javafx.scene.control.Tooltip; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; @@ -128,7 +129,8 @@ public class MultiFileItem extends ComponentSublist { protected final T data; public Option(String title, T data) { - this.title = title; this.data = data; + this.title = title; + this.data = data; } public T getData() { @@ -160,7 +162,14 @@ public class MultiFileItem extends ComponentSublist { pane.setLeft(left); if (StringUtils.isNotBlank(subtitle)) { - Label right = new Label(subtitle); + Optional shortSubtitle = StringUtils.truncate(subtitle); + Label right; + if (shortSubtitle.isPresent()) { + right = new Label(shortSubtitle.get()); + right.setTooltip(new Tooltip(subtitle)); + } else { + right = new Label(subtitle); + } BorderPane.setAlignment(right, Pos.CENTER_RIGHT); right.setWrapText(true); right.getStyleClass().add("subtitle-label"); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java index b95f62519..1bcfbe702 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java @@ -21,10 +21,7 @@ import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.io.ByteArrayOutputStream; import java.io.PrintStream; -import java.util.Collection; -import java.util.LinkedList; -import java.util.List; -import java.util.StringTokenizer; +import java.util.*; import java.util.regex.Pattern; /** @@ -245,6 +242,17 @@ public final class StringUtils { return result.toString(); } + public static int MAX_SHORT_STRING_LENGTH = 77; + + public static Optional truncate(String str) { + if (str.length() <= MAX_SHORT_STRING_LENGTH) { + return Optional.empty(); + } + + final int halfLength = (MAX_SHORT_STRING_LENGTH - 5) / 2; + return Optional.of(str.substring(0, halfLength) + " ... " + str.substring(str.length() - halfLength)); + } + /** * Class for computing the longest common subsequence between strings. */