Skip to content

Commit ebc6f19

Browse files
committed
更新 ToolbarListPageSkin 以使用 JFXListView 展示节点
1 parent 2f7ae8e commit ebc6f19

9 files changed

Lines changed: 34 additions & 140 deletions

File tree

HMCL/src/main/java/org/jackhuang/hmcl/ui/ToolbarListPageSkin.java

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,26 @@
1818
package org.jackhuang.hmcl.ui;
1919

2020
import com.jfoenix.controls.JFXButton;
21+
import com.jfoenix.controls.JFXListView;
2122
import javafx.beans.binding.Bindings;
2223
import javafx.geometry.Insets;
2324
import javafx.geometry.Pos;
2425
import javafx.scene.Node;
25-
import javafx.scene.control.ScrollPane;
26+
import javafx.scene.control.ListCell;
2627
import javafx.scene.control.SkinBase;
2728
import javafx.scene.layout.HBox;
2829
import javafx.scene.layout.Priority;
2930
import javafx.scene.layout.StackPane;
30-
import javafx.scene.layout.VBox;
3131
import org.jackhuang.hmcl.ui.construct.ComponentList;
3232
import org.jackhuang.hmcl.ui.construct.SpinnerPane;
3333

3434
import java.util.List;
3535

36-
public abstract class ToolbarListPageSkin<T extends ListPageBase<? extends Node>> extends SkinBase<T> {
36+
public abstract class ToolbarListPageSkin<E, P extends ListPageBase<E>> extends SkinBase<P> {
3737

38-
public ToolbarListPageSkin(T skinnable) {
38+
protected final JFXListView<E> listView;
39+
40+
public ToolbarListPageSkin(P skinnable) {
3941
super(skinnable);
4042

4143
SpinnerPane spinnerPane = new SpinnerPane();
@@ -58,18 +60,24 @@ public ToolbarListPageSkin(T skinnable) {
5860
}
5961

6062
{
61-
ScrollPane scrollPane = new ScrollPane();
62-
ComponentList.setVgrow(scrollPane, Priority.ALWAYS);
63-
scrollPane.setFitToWidth(true);
64-
65-
VBox content = new VBox();
66-
67-
Bindings.bindContent(content.getChildren(), skinnable.itemsProperty());
68-
69-
scrollPane.setContent(content);
70-
FXUtils.smoothScrolling(scrollPane);
71-
72-
root.getContent().add(scrollPane);
63+
this.listView = new JFXListView<>();
64+
this.listView.setPadding(Insets.EMPTY);
65+
this.listView.setCellFactory(listView -> new ListCell<>() {
66+
@Override
67+
protected void updateItem(E item, boolean empty) {
68+
super.updateItem(item, empty);
69+
if (!empty && item instanceof Node node) {
70+
setGraphic(node);
71+
setText(null);
72+
} else {
73+
setGraphic(null);
74+
setText(null);
75+
}
76+
}
77+
});
78+
ComponentList.setVgrow(listView, Priority.ALWAYS);
79+
Bindings.bindContent(this.listView.getItems(), skinnable.itemsProperty());
80+
root.getContent().add(listView);
7381
}
7482

7583
spinnerPane.setContent(root);
@@ -102,5 +110,5 @@ public static JFXButton createDecoratorButton(String tooltip, SVG svg, Runnable
102110
return ret;
103111
}
104112

105-
protected abstract List<Node> initializeToolbar(T skinnable);
113+
protected abstract List<Node> initializeToolbar(P skinnable);
106114
}

HMCL/src/main/java/org/jackhuang/hmcl/ui/ToolbarListPageSkin2.java

Lines changed: 0 additions & 115 deletions
This file was deleted.

HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaManagementPage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ private static final class JavaRuntimeItemSkin extends SkinBase<JavaItem> {
295295
}
296296
}
297297

298-
private static final class JavaPageSkin extends ToolbarListPageSkin2<JavaManagementPage.JavaItem, JavaManagementPage> {
298+
private static final class JavaPageSkin extends ToolbarListPageSkin<JavaItem, JavaManagementPage> {
299299

300300
JavaPageSkin(JavaManagementPage skinnable) {
301301
super(skinnable);

HMCL/src/main/java/org/jackhuang/hmcl/ui/main/JavaRestorePage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ private static final class DisabledJavaItemSkin extends SkinBase<DisabledJavaIte
192192
}
193193
}
194194

195-
private static final class JavaRestorePageSkin extends ToolbarListPageSkin<JavaRestorePage> {
195+
private static final class JavaRestorePageSkin extends ToolbarListPageSkin<DisabledJavaItem, JavaRestorePage> {
196196
JavaRestorePageSkin(JavaRestorePage skinnable) {
197197
super(skinnable);
198198
}

HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameListPage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ protected GameListSkin createDefaultSkin() {
154154
return new GameListSkin();
155155
}
156156

157-
private class GameListSkin extends ToolbarListPageSkin2<GameListItem, GameList> {
157+
private class GameListSkin extends ToolbarListPageSkin<GameListItem, GameList> {
158158

159159
public GameListSkin() {
160160
super(GameList.this);

HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/InstallerListPage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ public void onStop(boolean success, TaskExecutor executor) {
165165
executor.start();
166166
}
167167

168-
private class InstallerListPageSkin extends ToolbarListPageSkin<InstallerListPage> {
168+
private class InstallerListPageSkin extends ToolbarListPageSkin<InstallerItem, InstallerListPage> {
169169

170170
InstallerListPageSkin() {
171171
super(InstallerListPage.this);

HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/SchematicsPage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ public ItemSkin(Item item) {
599599
}
600600
}
601601

602-
private final class SchematicsPageSkin extends ToolbarListPageSkin<SchematicsPage> {
602+
private final class SchematicsPageSkin extends ToolbarListPageSkin<Item, SchematicsPage> {
603603
SchematicsPageSkin() {
604604
super(SchematicsPage.this);
605605
}

HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldBackupsPage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ void createBackup() {
155155
}), i18n("world.backup"), null);
156156
}
157157

158-
private final class WorldBackupsPageSkin extends ToolbarListPageSkin<WorldBackupsPage> {
158+
private final class WorldBackupsPageSkin extends ToolbarListPageSkin<BackupInfo, WorldBackupsPage> {
159159

160160
WorldBackupsPageSkin() {
161161
super(WorldBackupsPage.this);

HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListPage.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import javafx.beans.property.BooleanProperty;
2222
import javafx.beans.property.SimpleBooleanProperty;
2323
import javafx.scene.Node;
24+
import javafx.scene.control.Skin;
2425
import javafx.stage.FileChooser;
2526
import org.jackhuang.hmcl.game.World;
2627
import org.jackhuang.hmcl.setting.Profile;
@@ -67,7 +68,7 @@ public WorldListPage() {
6768
}
6869

6970
@Override
70-
protected ToolbarListPageSkin<WorldListPage> createDefaultSkin() {
71+
protected Skin<WorldListPage> createDefaultSkin() {
7172
return new WorldListPageSkin();
7273
}
7374

@@ -161,7 +162,7 @@ public void setShowAll(boolean showAll) {
161162
this.showAll.set(showAll);
162163
}
163164

164-
private final class WorldListPageSkin extends ToolbarListPageSkin<WorldListPage> {
165+
private final class WorldListPageSkin extends ToolbarListPageSkin<WorldListItem, WorldListPage> {
165166

166167
WorldListPageSkin() {
167168
super(WorldListPage.this);

0 commit comments

Comments
 (0)