From ef5849eba18b31f5c1f9a7bc14498e8ad68ded57 Mon Sep 17 00:00:00 2001 From: CiiLu <109708109+CiiLu@users.noreply.github.com> Date: Fri, 6 Feb 2026 22:12:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=AE=A1=E7=90=86=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=8A=A0=E8=BD=BD=E6=A0=B7=E5=BC=8F=E4=B8=8D=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E7=9A=84=E9=97=AE=E9=A2=98=20(#5406)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmcl/ui/ToolbarListPageSkin.java | 23 ++++--- .../ui/versions/ResourcepackListPage.java | 64 ++++++------------- 2 files changed, 34 insertions(+), 53 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/ToolbarListPageSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/ToolbarListPageSkin.java index a510b2308..b0477c0e5 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/ToolbarListPageSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/ToolbarListPageSkin.java @@ -42,13 +42,11 @@ public abstract class ToolbarListPageSkin> extends public ToolbarListPageSkin(P skinnable) { super(skinnable); - SpinnerPane spinnerPane = new SpinnerPane(); - spinnerPane.loadingProperty().bind(skinnable.loadingProperty()); - spinnerPane.failedReasonProperty().bind(skinnable.failedReasonProperty()); - spinnerPane.onFailedActionProperty().bind(skinnable.onFailedActionProperty()); - ComponentList root = new ComponentList(); root.getStyleClass().add("no-padding"); + + StackPane container = new StackPane(); + container.getChildren().add(root); StackPane.setMargin(root, new Insets(10)); List toolbarButtons = initializeToolbar(skinnable); @@ -60,19 +58,26 @@ public abstract class ToolbarListPageSkin> extends root.getContent().add(toolbar); } + SpinnerPane spinnerPane = new SpinnerPane(); + spinnerPane.loadingProperty().bind(skinnable.loadingProperty()); + spinnerPane.failedReasonProperty().bind(skinnable.failedReasonProperty()); + spinnerPane.onFailedActionProperty().bind(skinnable.onFailedActionProperty()); + + ComponentList.setVgrow(spinnerPane, Priority.ALWAYS); + { this.listView = new JFXListView<>(); this.listView.setPadding(Insets.EMPTY); this.listView.setCellFactory(listView -> createListCell((JFXListView) listView)); - ComponentList.setVgrow(listView, Priority.ALWAYS); Bindings.bindContent(this.listView.getItems(), skinnable.itemsProperty()); FXUtils.ignoreEvent(listView, KeyEvent.KEY_PRESSED, e -> e.getCode() == KeyCode.ESCAPE); - root.getContent().add(listView); + + spinnerPane.setContent(listView); } - spinnerPane.setContent(root); + root.getContent().add(spinnerPane); - getChildren().setAll(spinnerPane); + getChildren().setAll(container); } public static Node wrap(Node node) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ResourcepackListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ResourcepackListPage.java index bd321b461..55b52a2d2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ResourcepackListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ResourcepackListPage.java @@ -2,30 +2,27 @@ package org.jackhuang.hmcl.ui.versions; import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXListView; -import javafx.beans.binding.Bindings; import javafx.geometry.Insets; import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.control.ListCell; import javafx.scene.control.Skin; -import javafx.scene.control.SkinBase; import javafx.scene.image.Image; import javafx.scene.image.ImageView; -import javafx.scene.input.KeyCode; -import javafx.scene.input.KeyEvent; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; -import javafx.scene.layout.StackPane; import javafx.stage.FileChooser; import org.jackhuang.hmcl.mod.LocalModFile; import org.jackhuang.hmcl.resourcepack.ResourcepackFile; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.ui.Controllers; -import org.jackhuang.hmcl.ui.FXUtils; -import org.jackhuang.hmcl.ui.ListPageBase; -import org.jackhuang.hmcl.ui.SVG; -import org.jackhuang.hmcl.ui.construct.*; +import org.jackhuang.hmcl.ui.*; +import org.jackhuang.hmcl.ui.construct.MDListCell; +import org.jackhuang.hmcl.ui.construct.MessageDialogPane; +import org.jackhuang.hmcl.ui.construct.RipplerContainer; +import org.jackhuang.hmcl.ui.construct.TwoLineListItem; import org.jackhuang.hmcl.util.io.FileUtils; import java.io.ByteArrayInputStream; @@ -38,7 +35,6 @@ import java.util.List; import java.util.Objects; import java.util.stream.Stream; -import static org.jackhuang.hmcl.ui.ToolbarListPageSkin.createToolbarButton2; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; import static org.jackhuang.hmcl.util.logging.Logger.LOG; @@ -128,44 +124,24 @@ public final class ResourcepackListPage extends ListPageBase { - private final JFXListView listView; + private static final class ResourcepackListPageSkin extends ToolbarListPageSkin { - private ResourcepackListPageSkin(ResourcepackListPage control) { + public ResourcepackListPageSkin(ResourcepackListPage control) { super(control); + } - StackPane pane = new StackPane(); - pane.setPadding(new Insets(10)); - pane.getStyleClass().addAll("notice-pane"); - - ComponentList root = new ComponentList(); - root.getStyleClass().add("no-padding"); - listView = new JFXListView<>(); - - FXUtils.ignoreEvent(listView, KeyEvent.KEY_PRESSED, e -> e.getCode() == KeyCode.ESCAPE); - - HBox toolbar = new HBox(); - toolbar.setAlignment(Pos.CENTER_LEFT); - toolbar.setPickOnBounds(false); - toolbar.getChildren().setAll( - createToolbarButton2(i18n("button.refresh"), SVG.REFRESH, control::refresh), - createToolbarButton2(i18n("resourcepack.add"), SVG.ADD, control::onAddFiles), - createToolbarButton2(i18n("resourcepack.download"), SVG.DOWNLOAD, control::onDownload) + @Override + protected List initializeToolbar(ResourcepackListPage skinnable) { + return List.of( + createToolbarButton2(i18n("button.refresh"), SVG.REFRESH, skinnable::refresh), + createToolbarButton2(i18n("resourcepack.add"), SVG.ADD, skinnable::onAddFiles), + createToolbarButton2(i18n("resourcepack.download"), SVG.DOWNLOAD, skinnable::onDownload) ); - root.getContent().add(toolbar); + } - SpinnerPane center = new SpinnerPane(); - ComponentList.setVgrow(center, Priority.ALWAYS); - center.loadingProperty().bind(control.loadingProperty()); - - listView.setCellFactory(x -> new ResourcepackListCell(listView, control)); - Bindings.bindContent(listView.getItems(), control.getItems()); - - center.setContent(listView); - root.getContent().add(center); - - pane.getChildren().setAll(root); - getChildren().setAll(pane); + @Override + protected ListCell createListCell(JFXListView listView) { + return new ResourcepackListCell(listView, getSkinnable()); } }