2

ツリーを展開してツリーノードの名前を変更しようとすると、すべての名前が4〜5文字程度しか表示されず、その他は(...)と表示されましたが、ツリーが折りたたまれていれば、すべて問題ありません。以下は私のカスタムツリーセルレンダリングです:

public class customTreeCellRenderer extends DefaultTreeCellRenderer {
    public Component getTreeCellRendererComponent(JTree tree,
        Object value, boolean selected, boolean expanded,
        boolean leaf, int row, boolean hasFocus){

        super.getTreeCellRendererComponent(tree, value,
        selected, expanded, leaf, row, hasFocus);
        JLabel label = (JLabel) this ;


        label.setSize(label.getHeight(),value.toString().length());
        label.setText(value.toString());
        label.repaint();
        tree.revalidate();
        this.repaint();
        System.out.println("expanded "+expanded);
        System.out.println("Custom  "+ value.toString());

        return label;
    }
} 
4

1 に答える 1

0
label.setSize(label.getHeight(),value.toString().length());
  1. このメソッドは幅と高さを取り、両方のパラメーターを切り替えました。
  2. String.length() は、文字列の表示サイズではなく、文字数のみを返します。DefaultRenderer のフォントでレンダリングされた文字列の幅を取得する場合は、次を使用します。getFont().getStringBounds("yourString", getFontMetrics(getFont()).getFontRenderContext()).getWidth();

これを試すことができます:

  if (label.getGraphics() != null) {
    final Rectangle2D r = getGraphics().getFontMetrics(getFont())
        .getStringBounds(value.toString(), getGraphics());

    final Dimension d = new Dimension((int) r.getWidth()
        + getIcon().getIconWidth() + getIconTextGap(), (int) r.getHeight());

    label.setMaximumSize(d);
    label.setPreferredSize(d);
    label.setMinimumSize(d);
  }
于 2011-10-11T20:16:31.860 に答える