diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java index f6ecc715c..1925bbeb7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java @@ -22,6 +22,7 @@ import javafx.beans.Observable; import javafx.beans.binding.Bindings; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.value.ChangeListener; import javafx.css.PseudoClass; import javafx.geometry.Insets; import javafx.geometry.Pos; @@ -318,7 +319,9 @@ public class InstallerItem extends Control { private static final class InstallerItemSkin extends SkinBase { private static final PseudoClass LIST_ITEM = PseudoClass.getPseudoClass("list-item"); private static final PseudoClass CARD = PseudoClass.getPseudoClass("card"); - private static final WeakListenerHolder holder = new WeakListenerHolder(); + + @SuppressWarnings({"FieldCanBeLocal", "unused"}) + private final ChangeListener holder; InstallerItemSkin(InstallerItem control) { super(control); @@ -326,9 +329,10 @@ public class InstallerItem extends Control { Pane pane; if (control.style == Style.CARD) { pane = new VBox(); - holder.add(FXUtils.onWeakChange(pane.widthProperty(), v -> FXUtils.setLimitHeight(pane, v.doubleValue() * 0.7))); + holder = FXUtils.onWeakChangeAndOperate(pane.widthProperty(), v -> FXUtils.setLimitHeight(pane, v.doubleValue() * 0.7)); } else { pane = new HBox(); + holder = null; } pane.getStyleClass().add("installer-item"); RipplerContainer container = new RipplerContainer(pane); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AbstractInstallersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AbstractInstallersPage.java index 33b1987cf..237e1f2b2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AbstractInstallersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AbstractInstallersPage.java @@ -119,20 +119,15 @@ public abstract class AbstractInstallersPage extends Control implements WizardPa { InstallerItem[] libraries = control.group.getLibraries(); - FlowPane libraryPane = new FlowPane(libraries); - libraryPane.setVgap(16); - libraryPane.setHgap(16); + FlowPane libraryPane = new FlowPane(16, 16, libraries); + ScrollPane scrollPane = new ScrollPane(libraryPane); + scrollPane.setFitToWidth(true); + scrollPane.setFitToHeight(true); + BorderPane.setMargin(scrollPane, new Insets(16, 0, 16, 0)); + root.setCenter(scrollPane); - if (libraries.length <= 8) { - BorderPane.setMargin(libraryPane, new Insets(16, 0, 16, 0)); - root.setCenter(libraryPane); - } else { - ScrollPane scrollPane = new ScrollPane(libraryPane); - scrollPane.setFitToWidth(true); - scrollPane.setFitToHeight(true); - BorderPane.setMargin(scrollPane, new Insets(16, 0, 16, 0)); - root.setCenter(scrollPane); - } + if (libraries.length <= 8) + scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); } {