feat(JTreeComboBox): 优化下拉框显示内容及选中项处理

- 设置整个 JComboBox 的 renderer,自定义列表单元格渲染器
- 优化选中项处理逻辑,支持非 DefaultMutableTreeNode 类型的选中项
- 添加调试日志,便于跟踪组件状态变化
mian
熊朝柱 1 month ago
parent 7a602bcb7f
commit e72dbea79b

@ -41,6 +41,7 @@ public class JTreeComboBox extends JComboBox<Object> {
@Override @Override
public void valueChanged(TreeSelectionEvent e) { public void valueChanged(TreeSelectionEvent e) {
if (!suppressEvents) { if (!suppressEvents) {
System.out.println("更新选中项!");
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (selectedNode != null) { if (selectedNode != null) {
setSelectedItem(selectedNode); setSelectedItem(selectedNode);
@ -90,23 +91,41 @@ public class JTreeComboBox extends JComboBox<Object> {
} }
}); });
// 设置整个 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); setSelectedItem(root);
System.out.println("JTreeComboBox初始化完成"); System.out.println("JTreeComboBox初始化完成");
} }
@Override @Override
public void setSelectedItem(Object anObject) { public void setSelectedItem(Object anObject) {
System.out.println("设置选中项: " + anObject);
suppressEvents = true; suppressEvents = true;
super.setSelectedItem(anObject); super.setSelectedItem(anObject);
suppressEvents = false; suppressEvents = false;
// 更新树的选择状态 // 更新树的选择状态
System.out.println("选中项类型 = "+anObject.getClass().getTypeName());
if (anObject instanceof DefaultMutableTreeNode) { if (anObject instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) anObject; DefaultMutableTreeNode node = (DefaultMutableTreeNode) anObject;
TreePath path = new TreePath(node.getPath()); TreePath path = new TreePath(node.getPath());
tree.setSelectionPath(path); tree.setSelectionPath(path);
}else {
System.out.println("选中项:"+anObject+"不是DefaultMutableTreeNode类型设置选中项失败");
} }
revalidate(); // 触发布局更新 revalidate(); // 触发布局更新
repaint(); // 触发重绘 repaint(); // 触发重绘

Loading…
Cancel
Save