JTree の行の高さを可変にしたいと考えています。私が読んだことから、私がしなければならないことはsetRowHeight(0)
、カスタムを実装することだけですTreeCellRenderer
。TreeRenderer 内では、アイテムに応じて異なる境界線が設定されます。ただし、境界線を追加すると、行の高さは変わりません。たとえば、EmptyBorder(0,0,8,0)
を追加すると、ラベルが 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;
}
}