diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FontComboBox.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FontComboBox.java index 64ffda3317e..96f436ab406 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FontComboBox.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FontComboBox.java @@ -28,6 +28,10 @@ import com.jfoenix.controls.JFXListCell; import javafx.beans.binding.Bindings; +import javafx.scene.Node; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.scene.control.skin.ComboBoxListViewSkin; import javafx.scene.text.Font; public final class FontComboBox extends JFXComboBox { @@ -61,5 +65,25 @@ public void updateItem(String item, boolean empty) { setItems(observableList(Font.getFamilies())); loaded = true; }); + + skinProperty().addListener((obs, oldSkin, newSkin) -> { + if (!(newSkin instanceof ComboBoxListViewSkin skin)) { + return; + } + + skin.setHideOnClick(false); + + if (skin.getPopupContent() instanceof ListView listView) { + listView.addEventHandler(javafx.scene.input.MouseEvent.MOUSE_CLICKED, e -> { + Node target = e.getTarget() instanceof Node ? (Node) e.getTarget() : null; + while (target != null && !(target instanceof ListCell)) { + target = target.getParent(); + } + if (target instanceof ListCell cell && !cell.isEmpty()) { + hide(); + } + }); + } + }); } }