From e72dbea79b5ff5abbad3a4cfb98a876b81d65da2 Mon Sep 17 00:00:00 2001 From: xiongcz Date: Tue, 13 May 2025 17:46:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(JTreeComboBox):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E6=A1=86=E6=98=BE=E7=A4=BA=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E5=8F=8A=E9=80=89=E4=B8=AD=E9=A1=B9=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 设置整个 JComboBox 的 renderer,自定义列表单元格渲染器 - 优化选中项处理逻辑,支持非 DefaultMutableTreeNode 类型的选中项 - 添加调试日志,便于跟踪组件状态变化 --- .../dialogs/CreateTempDrawingDialog.class | Bin 33027 -> 33100 bytes .../utils/JTreeComboBox.java | 19 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/bin/cn/net/connor/createTempDrawings/dialogs/CreateTempDrawingDialog.class b/bin/cn/net/connor/createTempDrawings/dialogs/CreateTempDrawingDialog.class index 9ff7d8792ac9f787fedbbddb705ffb2106dd26c0..1087ebfa1dea01a112770e378938e1fa905917b5 100644 GIT binary patch delta 7533 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 NnvRA3V!6rZ{{Vilkk9}C delta 7317 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 diff --git a/src/cn/net/connor/createTempDrawings/utils/JTreeComboBox.java b/src/cn/net/connor/createTempDrawings/utils/JTreeComboBox.java index 2819fa4..426130d 100644 --- a/src/cn/net/connor/createTempDrawings/utils/JTreeComboBox.java +++ b/src/cn/net/connor/createTempDrawings/utils/JTreeComboBox.java @@ -41,6 +41,7 @@ public class JTreeComboBox extends JComboBox { @Override public void valueChanged(TreeSelectionEvent e) { if (!suppressEvents) { + System.out.println("ѡ"); DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if (selectedNode != null) { setSelectedItem(selectedNode); @@ -90,23 +91,41 @@ public class JTreeComboBox extends JComboBox { } }); + // JComboBox renderer + this.setRenderer(new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + if (value instanceof DefaultMutableTreeNode) { + DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; + value = node.getUserObject(); // ʹýڵûΪʾ + } + return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + } + }); + // ʼѡڵ setSelectedItem(root); System.out.println("JTreeComboBoxʼ"); + + } @Override public void setSelectedItem(Object anObject) { + System.out.println("ѡ: " + anObject); suppressEvents = true; super.setSelectedItem(anObject); suppressEvents = false; // ѡ״̬ + System.out.println("ѡ = "+anObject.getClass().getTypeName()); if (anObject instanceof DefaultMutableTreeNode) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) anObject; TreePath path = new TreePath(node.getPath()); tree.setSelectionPath(path); + }else { + System.out.println("ѡ:"+anObject+"DefaultMutableTreeNodeͣѡʧܣ"); } revalidate(); // ָ repaint(); // ػ