我希望我的 JTree 具有可变的行高。根据我的阅读,我所要做的就是setRowHeight(0)
实现一个自定义的TreeCellRenderer
. 在 TreeRenderer 内部,根据项目设置了不同的边框。但是,当添加边框时,行高仍然保持不变。例如,EmptyBorder(0,0,8,0)
添加 an 时,标签会移动到顶部 8 个像素。因此,树不像左侧的预期结果,而是看起来像右侧:
EXPECTED: RESULT:
_ _
|-|_| Item 1 |-|_| Item 1
| _ | |_| Item 2
|-|_| Item 2 |-
| | _
| _ |-|_| Item 3
|-|_| Item 3
这基本上是我的代码:
JTree tree = new MyTree(root);
class MyTree extends JTree{
public MyTree(DefaultMutableTreeNode root){
super(root);
setCellRenderer(new CustomCellRenderer());
setRowHeight(0);
}
class CustomCellRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean isSelected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
JComponent c = (JComponent) super.getTreeCellRendererComponent(tree, value, isSelected, expanded, leaf, row, hasFocus);
Data d = (Data)((DefaultMutableTreeNode) value).getUserData();
int bttm = 0;
if(d.isTrue()){
bttm = 8;
}
c.setBorder(BorderFactory.createEmptyBorder(0, 0, bttm, 0));
//setting size didn't show any effect either:
//c.setPreferredSize(new Dimension(150, 16+bttm));
return c;
}
}