6

JTreeのノード行の間に空白を追加することは可能ですか?ノードアイコンにカスタム画像を使用していますが、画像は標準のノードアイコンよりも大きいと思います。そのため、ノードアイコンは非常に近くに配置されています。少し離れていれば見栄えが良くなります。

4

1 に答える 1

4

ツリーノード間に実際の間隔を追加するには、UIを変更し、適切なAbstractLayoutCacheサクセサを返す必要があります(デフォルトでは、JTreeは行の高さの値に応じてFixedHeightLayoutCacheまたはVariableHeightLayoutCacheの2つのクラスを使用します)。

ノード間にスペースを追加する最も簡単な方法は、レンダラーを変更することです。これにより、次のように境界線が追加されます。

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がコメントで提供しているように)、さまざまなOSで可能なフォントサイズとスタイルが異なるため、より適切です。したがって、どこでもサイズの問題は発生しません。

ちなみに、ノード選択の表現を好きなように変更することもできます。そうすれば、視覚的に間隔を偽造することもできます。

于 2012-05-18T13:03:52.377 に答える