【发布时间】:2012-05-25 14:57:35
【问题描述】:
是否可以在 JTree 的节点行之间添加一些空格?我正在为节点图标使用自定义图像,我猜图像比标准节点图标大,所以节点图标非常靠近。分开一点会更好看。
【问题讨论】:
-
你用过JTree的setRowHeight()方法吗?您可以将其设置为 0 以使每一行单独计算其高度。
标签: java swing padding nodes jtree
是否可以在 JTree 的节点行之间添加一些空格?我正在为节点图标使用自定义图像,我猜图像比标准节点图标大,所以节点图标非常靠近。分开一点会更好看。
【问题讨论】:
标签: java swing padding nodes jtree
要在树节点之间添加实际间距,您必须修改 UI 并返回适当的 AbstractLayoutCache 后继(默认情况下,JTree 使用两个类,具体取决于行高值:FixedHeightLayoutCache 或 VariableHeightLayoutCache) .
在节点之间添加一些间距最简单的方法是修改渲染器,这样它就会有一些额外的边框,例如:
public static void main ( String[] args )
{
JFrame frame = new JFrame ();
JTree tree = new JTree ();
tree.setCellRenderer ( new DefaultTreeCellRenderer ()
{
private Border border = BorderFactory.createEmptyBorder ( 4, 4, 4, 4 );
public Component getTreeCellRendererComponent ( JTree tree, Object value, boolean sel,
boolean expanded, boolean leaf, int row,
boolean hasFocus )
{
JLabel label = ( JLabel ) super
.getTreeCellRendererComponent ( tree, value, sel, expanded, leaf, row,
hasFocus );
label.setBorder ( border );
return label;
}
} );
frame.add ( tree );
frame.pack ();
frame.setLocationRelativeTo ( null );
frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
frame.setVisible ( true );
}
这仍然比仅设置静态行高(正如 Subs 在评论中提供给您的那样)有点困难,但由于各种操作系统上可能存在不同的字体大小和样式,它会更好。所以你不会在任何地方遇到尺寸问题。
顺便说一句,您还可以按照自己喜欢的方式更改节点选择表示,这样您甚至可以在视觉上伪造间距。
【讨论】: