gpt4 book ai didi

java - JTree TreeCellRenderer 在显示选择颜色时引发问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:59:20 26 4
gpt4 key购买 nike

我正在使用下面这段代码:

 class CountryTreeCellRenderer implements TreeCellRenderer {
private JLabel label;

CountryTreeCellRenderer() {
label = new JLabel();
}

public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
Object o = ((DefaultMutableTreeNode) value).getUserObject();
if (o instanceof Country) {
Country country = (Country) o;
label.setIcon(new ImageIcon(country.getFlagIcon()));
label.setText(country.getName());
} else {
label.setIcon(null);
label.setText("" + value);
}
return label;
}
}

由于我正在传递/返回标签,因此在选择 JTree 中的任何组件时,不会出现选择颜色。我尝试使用:

JComponent comp = (JComponent) super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
comp.setOpaque(true);
if(selected)
comp.setBackground(Color.RED);

但是如果我返回 comp,那么树的输出就不会按预期出现。

如何解决?

我没有为此实现任何编辑器。

最佳答案

请看source code of the DefaultTreeCellRenderer ,它也扩展了 JLabel 并且完全能够设置背景颜色。我复制粘贴了以下相关行:

  if (selected)
{
super.setBackground(getBackgroundSelectionColor());
setForeground(getTextSelectionColor());

if (hasFocus)
setBorderSelectionColor(UIManager.getLookAndFeelDefaults().
getColor("Tree.selectionBorderColor"));
else
setBorderSelectionColor(null);
}
else
{
super.setBackground(getBackgroundNonSelectionColor());
setForeground(getTextNonSelectionColor());
setBorderSelectionColor(null);
}

关于java - JTree TreeCellRenderer 在显示选择颜色时引发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9051463/

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