From 484ce6c895002007f0c517fe91968672727101e8 Mon Sep 17 00:00:00 2001 From: huangyuhui Date: Wed, 14 Feb 2018 22:19:25 +0800 Subject: [PATCH] try javafx static attributes --- .../org/jackhuang/hmcl/ui/AccountItem.java | 3 - .../org/jackhuang/hmcl/ui/AccountsPage.java | 2 - .../java/org/jackhuang/hmcl/ui/Decorator.java | 5 +- .../java/org/jackhuang/hmcl/ui/FXUtils.java | 72 +++++++++++++++---- .../org/jackhuang/hmcl/ui/SettingsPage.java | 5 +- .../org/jackhuang/hmcl/ui/VersionItem.java | 2 - .../jackhuang/hmcl/ui/VersionListItem.java | 2 - .../hmcl/ui/VersionSettingsController.java | 22 ------ .../hmcl/ui/construct/ComponentListCell.java | 2 +- .../hmcl/ui/construct/MultiFileItem.java | 4 +- .../hmcl/ui/construct/NumberValidator.java | 5 +- .../ui/construct/TaskExecutorDialogPane.java | 3 - .../hmcl/ui/download/ModpackPage.java | 3 - .../resources/assets/fxml/account-item.fxml | 3 +- .../main/resources/assets/fxml/account.fxml | 6 +- .../main/resources/assets/fxml/decorator.fxml | 5 +- .../assets/fxml/download/modpack.fxml | 3 +- .../main/resources/assets/fxml/setting.fxml | 23 ++++-- .../resources/assets/fxml/task-dialog.fxml | 3 +- .../resources/assets/fxml/version-item.fxml | 5 +- .../assets/fxml/version-list-item.fxml | 9 +-- .../assets/fxml/version/version-settings.fxml | 36 +++++++--- .../resources/assets/lang/I18N.properties | 1 + .../assets/lang/I18N_zh_CN.properties | 3 +- 24 files changed, 135 insertions(+), 92 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountItem.java index 8570ccb2a..93b5ee4e3 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountItem.java @@ -67,9 +67,6 @@ public final class AccountItem extends StackPane { FXUtils.loadFXML(this, "/assets/fxml/account-item.fxml"); - FXUtils.limitWidth(this, 160); - FXUtils.limitHeight(this, 156); - setEffect(new DropShadow(BlurType.GAUSSIAN, Color.rgb(0, 0, 0, 0.26), 5.0, 0.12, -0.5, 1.0)); chkSelected.setToggleGroup(toggleGroup); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountsPage.java index 561e1322c..ca1b15b15 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountsPage.java @@ -73,8 +73,6 @@ public final class AccountsPage extends StackPane implements DecoratorPage { dialog.setDialogContainer(this); FXUtils.smoothScrolling(scrollPane); - FXUtils.setValidateWhileTextChanged(txtUsername); - FXUtils.setValidateWhileTextChanged(txtPassword); cboType.getItems().setAll(Main.i18n("account.methods.offline"), Main.i18n("account.methods.yggdrasil")); cboType.getSelectionModel().selectedIndexProperty().addListener((a, b, newValue) -> { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java index d20c7a120..ba59e5ad5 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java @@ -180,9 +180,6 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza animationHandler = new TransitionHandler(contentPlaceHolder); - FXUtils.setOverflowHidden((Pane) lookup("#contentPlaceHolderRoot")); - FXUtils.setOverflowHidden(drawerWrapper); - loadBackground(); } @@ -487,7 +484,7 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza if (content instanceof Region) { ((Region) content).setMinSize(0, 0); - FXUtils.setOverflowHidden((Region) content); + FXUtils.setOverflowHidden((Region) content, true); } if (content instanceof Refreshable) 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 a60af8e82..e7861c399 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -38,6 +38,7 @@ import javafx.scene.image.ImageView; import javafx.scene.image.WritableImage; import javafx.scene.input.MouseEvent; import javafx.scene.input.ScrollEvent; +import javafx.scene.layout.Pane; import javafx.scene.layout.Region; import javafx.scene.shape.Rectangle; import javafx.util.Duration; @@ -45,6 +46,7 @@ import org.jackhuang.hmcl.Main; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.OperatingSystem; +import org.jackhuang.hmcl.util.Pair; import java.io.File; import java.io.IOException; @@ -92,35 +94,79 @@ public final class FXUtils { }); } - public static void setValidateWhileTextChanged(JFXTextField field) { - field.textProperty().addListener(o -> field.validate()); - field.validate(); + public static void addListener(Node node, String key, ObservableValue value, Consumer callback) { + ChangeListener listener = (a, b, newValue) -> callback.accept(newValue); + node.getProperties().put(key, new Pair<>(callback, listener)); + value.addListener(listener); } - public static void setValidateWhileTextChanged(JFXPasswordField field) { - field.textProperty().addListener(o -> field.validate()); - field.validate(); + public static void removeListener(Node node, String key) { + if (node.getProperties().get(key) instanceof Pair) { + Pair pair = (Pair) node.getProperties().get(key); + if (pair.getValue() instanceof ObservableValue && pair.getKey() instanceof ChangeListener) { + ((ObservableValue) pair.getValue()).removeListener((ChangeListener) pair.getKey()); + } + } } - public static void setOverflowHidden(Region region) { - Rectangle rectangle = new Rectangle(); - rectangle.widthProperty().bind(region.widthProperty()); - rectangle.heightProperty().bind(region.heightProperty()); - region.setClip(rectangle); + public static void setValidateWhileTextChanged(Node field, boolean validate) { + if (field instanceof JFXTextField) { + if (validate) { + addListener(field, "FXUtils.validation", ((JFXTextField) field).textProperty(), o -> ((JFXTextField) field).validate()); + } else { + removeListener(field, "FXUtils.validation"); + } + ((JFXTextField) field).validate(); + } else if (field instanceof JFXPasswordField) { + if (validate) { + addListener(field, "FXUtils.validation", ((JFXPasswordField) field).textProperty(), o -> ((JFXPasswordField) field).validate()); + } else { + removeListener(field, "FXUtils.validation"); + } + ((JFXPasswordField) field).validate(); + } else + throw new IllegalArgumentException("Only JFXTextField and JFXPasswordField allowed"); } - public static void limitWidth(Region region, double width) { + public static boolean getValidateWhileTextChanged(Node field) { + return field.getProperties().containsKey("FXUtils.validation"); + } + + public static void setOverflowHidden(Region region, boolean hidden) { + if (hidden) { + Rectangle rectangle = new Rectangle(); + rectangle.widthProperty().bind(region.widthProperty()); + rectangle.heightProperty().bind(region.heightProperty()); + region.setClip(rectangle); + } else { + region.setClip(null); + } + } + + public static boolean getOverflowHidden(Region region) { + return region.getClip() != null; + } + + public static void setLimitWidth(Region region, double width) { region.setMaxWidth(width); region.setMinWidth(width); region.setPrefWidth(width); } - public static void limitHeight(Region region, double height) { + public static double getLimitWidth(Region region) { + return region.getMaxWidth(); + } + + public static void setLimitHeight(Region region, double height) { region.setMaxHeight(height); region.setMinHeight(height); region.setPrefHeight(height); } + public static double getLimitHeight(Region region) { + return region.getMaxHeight(); + } + public static void smoothScrolling(ScrollPane scrollPane) { JFXScrollPane.smoothScrolling(scrollPane); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java index c4b35b831..a394aadcf 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java @@ -52,7 +52,7 @@ public final class SettingsPage extends StackPane implements DecoratorPage { @FXML private JFXTextField txtProxyUsername; @FXML - private JFXTextField txtProxyPassword; + private JFXPasswordField txtProxyPassword; @FXML private JFXTextField txtFontSize; @FXML @@ -95,9 +95,6 @@ public final class SettingsPage extends StackPane implements DecoratorPage { { FXUtils.loadFXML(this, "/assets/fxml/setting.fxml"); - FXUtils.limitWidth(cboLanguage, 400); - FXUtils.limitWidth(cboDownloadSource, 400); - FXUtils.smoothScrolling(scroll); txtProxyHost.setText(Settings.INSTANCE.getProxyHost()); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionItem.java index 9abe4d49c..d4a9d379d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionItem.java @@ -65,8 +65,6 @@ public final class VersionItem extends StackPane { public VersionItem() { FXUtils.loadFXML(this, "/assets/fxml/version-item.fxml"); - FXUtils.limitWidth(this, 160); - FXUtils.limitHeight(this, 156); setEffect(new DropShadow(BlurType.GAUSSIAN, Color.rgb(0, 0, 0, 0.26), 5.0, 0.12, -1.0, 1.0)); btnSettings.setGraphic(SVG.gear("black", 15, 15)); btnUpdate.setGraphic(SVG.update("black", 15, 15)); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionListItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionListItem.java index 4085d531e..e929fcad2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionListItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionListItem.java @@ -46,8 +46,6 @@ public final class VersionListItem extends StackPane { lblGameVersion.setText(gameVersion); FXUtils.limitSize(imageView, 32, 32); - FXUtils.limitWidth(imageViewContainer, 32); - FXUtils.limitHeight(imageViewContainer, 32); } @FXML diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionSettingsController.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionSettingsController.java index 4b63c052a..23ec595f6 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionSettingsController.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionSettingsController.java @@ -85,28 +85,6 @@ public final class VersionSettingsController { FXUtils.smoothScrolling(scroll); - double limitWidth = 300; - FXUtils.limitWidth(txtMaxMemory, limitWidth); - FXUtils.limitWidth(cboLauncherVisibility, limitWidth); - - double limitHeight = 10; - FXUtils.limitHeight(chkNoJVMArgs, limitHeight); - FXUtils.limitHeight(chkNoCommon, limitHeight); - FXUtils.limitHeight(chkNoGameCheck, limitHeight); - FXUtils.limitHeight(chkShowLogs, limitHeight); - - NumberValidator nonnull = new NumberValidator("Must be a number.", false); - NumberValidator nullable = new NumberValidator("Must be a number.", true); - - txtWidth.setValidators(nonnull); - FXUtils.setValidateWhileTextChanged(txtWidth); - txtHeight.setValidators(nonnull); - FXUtils.setValidateWhileTextChanged(txtHeight); - txtMaxMemory.setValidators(nonnull); - FXUtils.setValidateWhileTextChanged(txtMaxMemory); - txtMetaspace.setValidators(nullable); - FXUtils.setValidateWhileTextChanged(txtMetaspace); - Task.of(variables -> { variables.set("list", JavaVersion.getJREs().values().stream().map(javaVersion -> javaItem.createChildren(javaVersion.getVersion(), javaVersion.getBinary().getAbsolutePath(), javaVersion) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentListCell.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentListCell.java index 5f8c443f1..78b73329b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentListCell.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentListCell.java @@ -103,7 +103,7 @@ public class ComponentListCell extends StackPane { VBox container = new VBox(); container.setStyle("-fx-padding: 8 0 0 0;"); - FXUtils.limitHeight(container, 0); + FXUtils.setLimitHeight(container, 0); Rectangle clipRect = new Rectangle(); clipRect.widthProperty().bind(container.widthProperty()); clipRect.heightProperty().bind(container.heightProperty()); 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 c167cc55d..2c6d43046 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 @@ -96,7 +96,7 @@ public class MultiFileItem extends ComponentList { right.setSpacing(3); right.getChildren().addAll(txtCustom, btnSelect); custom.setRight(right); - FXUtils.limitHeight(custom, 20); + FXUtils.setLimitHeight(custom, 20); pane.setStyle("-fx-padding: 0 0 10 0;"); pane.setSpacing(8); @@ -122,7 +122,7 @@ public class MultiFileItem extends ComponentList { public Node createChildren(String title, String subtitle, Object userData) { BorderPane pane = new BorderPane(); pane.setStyle("-fx-padding: 3;"); - FXUtils.limitHeight(pane, 20); + FXUtils.setLimitHeight(pane, 20); JFXRadioButton left = new JFXRadioButton(title); left.setToggleGroup(group); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/NumberValidator.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/NumberValidator.java index c934bbbdd..5a3cc6169 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/NumberValidator.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/NumberValidator.java @@ -18,6 +18,7 @@ package org.jackhuang.hmcl.ui.construct; import com.jfoenix.validation.base.ValidatorBase; +import javafx.beans.NamedArg; import javafx.scene.control.TextInputControl; import org.jackhuang.hmcl.util.StringUtils; @@ -28,11 +29,11 @@ public class NumberValidator extends ValidatorBase { this(false); } - public NumberValidator(boolean nullable) { + public NumberValidator(@NamedArg("nullable") boolean nullable) { this.nullable = nullable; } - public NumberValidator(String message, boolean nullable) { + public NumberValidator(@NamedArg("message") String message, @NamedArg("nullable") boolean nullable) { super(message); this.nullable = nullable; } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskExecutorDialogPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskExecutorDialogPane.java index 78b7cd3ea..5fce68699 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskExecutorDialogPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskExecutorDialogPane.java @@ -47,9 +47,6 @@ public class TaskExecutorDialogPane extends StackPane { public TaskExecutorDialogPane(Runnable cancel) { FXUtils.loadFXML(this, "/assets/fxml/task-dialog.fxml"); - FXUtils.limitHeight(this, 200); - FXUtils.limitWidth(this, 400); - setCancel(cancel); btnCancel.setOnMouseClicked(e -> { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java index 2d3de31fb..9839c0b64 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java @@ -99,9 +99,6 @@ public final class ModpackPage extends StackPane implements WizardPage { txtModpackName.setText(Main.i18n("modpack.task.install.error")); } } - - //FXUtils.limitHeight(borderPane, 100.0); - FXUtils.limitWidth(borderPane, 500.0); } @Override diff --git a/HMCL/src/main/resources/assets/fxml/account-item.fxml b/HMCL/src/main/resources/assets/fxml/account-item.fxml index 814d2e420..6fd58e48d 100644 --- a/HMCL/src/main/resources/assets/fxml/account-item.fxml +++ b/HMCL/src/main/resources/assets/fxml/account-item.fxml @@ -8,9 +8,10 @@ + + type="StackPane" FXUtils.limitWidth="160" FXUtils.limitHeight="156"> diff --git a/HMCL/src/main/resources/assets/fxml/account.fxml b/HMCL/src/main/resources/assets/fxml/account.fxml index 01ac93492..6bc035aff 100644 --- a/HMCL/src/main/resources/assets/fxml/account.fxml +++ b/HMCL/src/main/resources/assets/fxml/account.fxml @@ -6,7 +6,7 @@ - + @@ -38,13 +38,13 @@ - + - + diff --git a/HMCL/src/main/resources/assets/fxml/decorator.fxml b/HMCL/src/main/resources/assets/fxml/decorator.fxml index c5883149e..ccdc18de4 100644 --- a/HMCL/src/main/resources/assets/fxml/decorator.fxml +++ b/HMCL/src/main/resources/assets/fxml/decorator.fxml @@ -7,6 +7,7 @@ + @@ -18,7 +19,7 @@ maxHeight="519" maxWidth="800">
- + @@ -47,7 +48,7 @@
- diff --git a/HMCL/src/main/resources/assets/fxml/download/modpack.fxml b/HMCL/src/main/resources/assets/fxml/download/modpack.fxml index 433ea3e24..6bd81a0bd 100644 --- a/HMCL/src/main/resources/assets/fxml/download/modpack.fxml +++ b/HMCL/src/main/resources/assets/fxml/download/modpack.fxml @@ -6,13 +6,14 @@ + - + diff --git a/HMCL/src/main/resources/assets/fxml/setting.fxml b/HMCL/src/main/resources/assets/fxml/setting.fxml index 19bd4f732..2bf2247b9 100644 --- a/HMCL/src/main/resources/assets/fxml/setting.fxml +++ b/HMCL/src/main/resources/assets/fxml/setting.fxml @@ -8,6 +8,8 @@ + + @@ -38,7 +40,7 @@ - + - + + + + + + + @@ -71,11 +80,15 @@ diff --git a/HMCL/src/main/resources/assets/fxml/task-dialog.fxml b/HMCL/src/main/resources/assets/fxml/task-dialog.fxml index a9c1a97a1..28f7347ce 100644 --- a/HMCL/src/main/resources/assets/fxml/task-dialog.fxml +++ b/HMCL/src/main/resources/assets/fxml/task-dialog.fxml @@ -10,9 +10,10 @@ + + type="StackPane" FXUtils.limitWidth="400" FXUtils.limitHeight="200"> diff --git a/HMCL/src/main/resources/assets/fxml/version-item.fxml b/HMCL/src/main/resources/assets/fxml/version-item.fxml index 1db00dd31..6b9aa6149 100644 --- a/HMCL/src/main/resources/assets/fxml/version-item.fxml +++ b/HMCL/src/main/resources/assets/fxml/version-item.fxml @@ -6,10 +6,10 @@ - + + type="StackPane" pickOnBounds="false" FXUtils.limitWidth="160" FXUtils.limitHeight="156"> @@ -21,6 +21,7 @@
diff --git a/HMCL/src/main/resources/assets/fxml/version-list-item.fxml b/HMCL/src/main/resources/assets/fxml/version-list-item.fxml index 01ea7e95f..bc3fa3872 100644 --- a/HMCL/src/main/resources/assets/fxml/version-list-item.fxml +++ b/HMCL/src/main/resources/assets/fxml/version-list-item.fxml @@ -5,6 +5,7 @@ + - - - - + + + + diff --git a/HMCL/src/main/resources/assets/fxml/version/version-settings.fxml b/HMCL/src/main/resources/assets/fxml/version/version-settings.fxml index 7a83c4947..6eb20f12c 100644 --- a/HMCL/src/main/resources/assets/fxml/version/version-settings.fxml +++ b/HMCL/src/main/resources/assets/fxml/version/version-settings.fxml @@ -9,6 +9,8 @@ + + @@ -56,7 +58,11 @@ - + + + + + @@ -65,7 +71,7 @@