2012-05-18 98 views
5

是否可以在JTree中的节点行之间添加一些空格?我使用节点图标的自定义图像,我猜图像比标准节点图标大,所以节点图标坐在一起非常靠近。如果有一点分离,它会更好看。在JTree中的行之间添加垂直填充/空间?

+5

你使用过JTree的setRowHeight()方法吗?您可以将其设置为0,以使每一行分别计算其高度。 – Subs

回答

3

要添加,你将不得不修改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); 
} 

这仍然比仅仅设置静态行高难一点(作为子提供给你的评论),但它是更好的,由于不同的操作系统上可能的字体大小和风格。所以你不会在任何地方遇到尺寸问题。顺便说一下,您还可以按照自己喜欢的方式更改节点选择表示法,这样您甚至可以在视觉上伪造间距。

+1

是的,这就是我最终做的事情(同时将JTree的行高设置为0,以便它将高度计算推迟到单元格渲染器)。工作得很好。 –