如何调整垂直线和子节点位置根据JTree中的图标大小?

时间:2013-11-20 08:03:28

标签: java swing jtree

我通过实现TreeCellRenderer来制作自定义样式的JTree,如下所示:

              JPanel with BoxLayout X-Axis
-------------------------------------------------------------
|        |                                                  |
| JLabel |                    Text Area                     |
|  ICON  |     (JPanel with BoxLayout Y-Axis, 2 JLabels)    |
|        |                                                  |
-------------------------------------------------------------

但现在我遇到了一个问题:

Screenshot

我在这里使用一个更大的图标,并且通向子节点的垂直线的位置仍然是旧的。我希望调整位置垂直线和子节点 - 将垂直线移动到与图标中心对齐。

目前,图标为32x32px;在未来我想根据电池测试区域的总高度引入自动调整大小。因此,最好根据图标的实际大小动态调整线位置。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

垂直线的水平位置由BasicTreeUI,left / rightChildIndent的两个属性控制。所以你可以根据实际的图标宽度f.i来设置它们。像:

// your standard icon
Icon icon = ...
BasicTreeUI ui = (BasicTreeUI) tree.getUI();
int iconWidth = icon.getIconWidth() / 2;
ui.setLeftChildIndent(iconWidth); 
ui.setRightChildIndent(iconWidth + 10); 

请注意,只要在运行时更改LAF,您就必须再次设置它们。