gpt4 book ai didi

java - 扩展的 JTree 渲染

转载 作者:行者123 更新时间:2023-11-29 09:20:00 25 4
gpt4 key购买 nike

当树展开并且我尝试重命名树节点时,并非所有名称仅显示大约 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;
}
}

最佳答案

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);
}

关于java - 扩展的 JTree 渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7138508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com