From 867c5f6602c6635980d690235f8e825443f4e9ca Mon Sep 17 00:00:00 2001 From: Timi Date: Wed, 17 Jun 2026 01:13:41 +0800 Subject: [PATCH] remove CheckBoxPicker --- .../fx/ui/components/CheckBoxPicker.java | 147 ------------------ .../pages/component/CheckBoxPickerDemo.java | 51 ------ 2 files changed, 198 deletions(-) delete mode 100644 src/main/java/com/imyeyu/fx/ui/components/CheckBoxPicker.java delete mode 100644 src/test/java/com/imyeyu/fx/ui/examples/view/pages/component/CheckBoxPickerDemo.java diff --git a/src/main/java/com/imyeyu/fx/ui/components/CheckBoxPicker.java b/src/main/java/com/imyeyu/fx/ui/components/CheckBoxPicker.java deleted file mode 100644 index 3d7f5e6..0000000 --- a/src/main/java/com/imyeyu/fx/ui/components/CheckBoxPicker.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.imyeyu.fx.ui.components; - -import com.imyeyu.fx.ui.TimiFXUI; -import com.imyeyu.java.bean.CallbackArgReturn; -import javafx.collections.FXCollections; -import javafx.collections.ListChangeListener; -import javafx.collections.ObservableList; -import javafx.geometry.Bounds; -import javafx.geometry.Insets; -import javafx.geometry.Pos; -import javafx.scene.control.CheckBox; -import javafx.scene.control.TextField; -import javafx.scene.layout.TilePane; -import javafx.stage.Popup; -import lombok.Getter; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 多选选择器,文本框弹出复选框组件进行多项选择 - * - * @author 夜雨 - * @since 2021-12-29 17:05 - */ -public class CheckBoxPicker extends TextField implements TimiFXUI { - - /** 数据列表 */ - @Getter - private final ObservableList items; - private final CheckBoxListPopup checkBoxListPopup; - - /** 默认构造器 */ - public CheckBoxPicker() { - items = FXCollections.observableList(new ArrayList<>()); - - checkBoxListPopup = new CheckBoxListPopup<>(items); - - setEditable(false); - - // ---------- 事件 ---------- - - setOnMouseClicked(e -> { - Bounds b = localToScreen(getLayoutBounds()); - checkBoxListPopup.show(this, b.getMinX() - 5, b.getMaxY() - 6); - }); - - checkBoxListPopup.root.prefWidthProperty().bind(widthProperty()); - } - - /** - * 设置复选框工厂,工厂入参数据对象,返回复选框组件 - * - * @param factory 复选框工厂 - */ - public void setCheckBoxFactory(CallbackArgReturn factory) { - checkBoxListPopup.checkBoxFactory = factory; - } - - /** - * 获取已选项 - * - * @return 已选项 - */ - public ObservableList getSelectedItems() { - return checkBoxListPopup.selectedItems; - } - - /** - * 复选框列表弹窗 - * - * @param 数据类型 - * @author 夜雨 - * @since 2021-12-29 19:40 - */ - private static class CheckBoxListPopup extends Popup implements TimiFXUI { - - private static final Insets PADDING = new Insets(6, 8, 6, 8); - - private final TilePane root; - private final Map cache; // 数据映射缓存 - - final ObservableList selectedItems; - CallbackArgReturn checkBoxFactory; - - /** - * 默认构造 - * - * @param items 数据列表 - */ - public CheckBoxListPopup(ObservableList items) { - cache = new HashMap<>(); - selectedItems = FXCollections.observableList(new ArrayList<>()); - - root = new TilePane(); - root.setHgap(8); - root.setEffect(Shadow.POPUP); - root.setBorder(Stroke.DEFAULT); - root.setPadding(PADDING); - root.setMinWidth(300); - root.setBackground(BG.DEFAULT); - root.setTileAlignment(Pos.CENTER_LEFT); - - setAutoHide(true); - getContent().add(root); - - // ---------- 事件 ---------- - - // 列表更新 - items.addListener((ListChangeListener) c -> { - if (c.next()) { - if (c.wasAdded()) { - // 添加 - List list = c.getAddedSubList(); - for (T t : list) { - CheckBox box; - if (checkBoxFactory != null) { - box = checkBoxFactory.handler(t); - } else { - box = new CheckBox(t.toString()); - } - box.selectedProperty().addListener((obs, o, isSelected) -> { - if (isSelected) { - selectedItems.add(t); - } else { - selectedItems.remove(t); - } - }); - cache.put(t, box); - root.getChildren().add(box); - } - return; - } - if (c.wasRemoved()) { - // 移除 - List list = c.getRemoved(); - for (T t : list) { - root.getChildren().remove(cache.get(t)); - } - } - } - }); - } - } -} diff --git a/src/test/java/com/imyeyu/fx/ui/examples/view/pages/component/CheckBoxPickerDemo.java b/src/test/java/com/imyeyu/fx/ui/examples/view/pages/component/CheckBoxPickerDemo.java deleted file mode 100644 index ac397c5..0000000 --- a/src/test/java/com/imyeyu/fx/ui/examples/view/pages/component/CheckBoxPickerDemo.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.imyeyu.fx.ui.examples.view.pages.component; - -import com.imyeyu.fx.ui.TimiFXUI; -import com.imyeyu.fx.ui.components.CheckBoxPicker; -import com.imyeyu.fx.ui.examples.component.AbstractDemoPane; -import com.imyeyu.fx.ui.examples.component.sidebar.SidebarItem; -import com.imyeyu.inject.annotation.Component; -import javafx.collections.ListChangeListener; -import javafx.geometry.Insets; -import javafx.scene.layout.FlowPane; - -import java.util.List; - -/** - * 多选框选择器 - * - * @author 夜雨 - * @since 2022-08-29 15:27 - */ -@Component -public class CheckBoxPickerDemo extends AbstractDemoPane { - - public CheckBoxPickerDemo() { - title.setText(SidebarItem.CHECK_BOX_PICKER.getText()); - document.sync("https://doc.imyeyu.net/timi-fx/net/imyeyu/timifx/component/CheckBoxPicker.html"); - source.sync("https://git.imyeyu.net/Timi/timi-fx/src/master/src/main/java/net/imyeyu/timifx/component/CheckBoxPicker.java"); - - // 选择器 - CheckBoxPicker picker = new CheckBoxPicker<>(); - picker.setPrefWidth(390); - picker.getSelectedItems().addListener((ListChangeListener) c -> { - List items = picker.getSelectedItems(); - picker.clear(); - for (int i = 0; i < items.size(); i++) { - picker.appendText(items.get(i)); - if (i < items.size() - 1) { - picker.appendText(", "); - } - } - }); - - setCenter(new FlowPane() {{ - setPadding(new Insets(20)); - getChildren().add(picker); - }}); - - for (int i = 0; i < 32; i++) { - picker.getItems().add(TimiFXUI.MULTILINGUAL.text("fx.example.check_box_picker.item")); - } - } -}