【问题标题】:Change Background color of leaf of Tree改变树叶的背景颜色
【发布时间】:2012-10-08 14:12:12
【问题描述】:

想要在一种特定条件下只改变树叶的颜色。

if (l_sel_node_object.getIsEnabled().trim().equalsIgnoreCase("N"))
    defaultTreeCellRenderer.setBackgroundSelectionColor(Color.red);

但它正在改变每个选定节点的背景。谁能帮帮我。

【问题讨论】:

  • 请学习java命名约定并遵守它们。

标签: swing background-color jtree


【解决方案1】:

仅在金属外观和感觉上进行测试:

import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;

public class MainPanel {
  public JPanel makeUI() {
    JTree tree = new JTree();
    tree.setCellRenderer(new RedTreeCellRenderer());
    JPanel p = new JPanel(new BorderLayout(5, 5));
    p.add(new JScrollPane(tree));
    return p;
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(new MainPanel().makeUI());
    f.setSize(320, 240);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}
//*
class RedTreeCellRenderer 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);
    if(isSelected) {
      c.setForeground(getTextSelectionColor());
      if (leaf && value.toString().equalsIgnoreCase("red")) {
        //<strong>
        c.setOpaque(true);
        //</strong>
        c.setBackground(Color.RED);
      } else {
        c.setOpaque(false);
        c.setBackground(getBackgroundSelectionColor());
      }
    } else {
      c.setOpaque(false);
      c.setForeground(getTextNonSelectionColor());
      c.setBackground(getBackgroundNonSelectionColor());
    }
    return c;
  }
}
/*/
class RedTreeCellRenderer2 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);
    if(isSelected) {
      if(leaf) {
        setParticularCondition(value.toString());
      }
      c.setForeground(getTextSelectionColor());
      c.setBackground(getBackgroundSelectionColor());
    } else {
      c.setForeground(getTextNonSelectionColor());
      c.setBackground(getBackgroundNonSelectionColor());
    }
    return c;
  }
  boolean particularCondition = false;
  private void setParticularCondition(String str) {
    particularCondition = str.equalsIgnoreCase("red");
  }
  @Override public Color getBackgroundSelectionColor() {
    if(particularCondition) return Color.RED;
    else return super.getBackgroundSelectionColor();
  }
}
//*/

【讨论】:

  • hmm ... 故意在图标下方和文本下方设置背景颜色?看起来......对我的眼睛不太好:-)
  • @kleopatra 可参考 JTree 绘制。学习 JXTree 可能也不错 :-)
猜你喜欢
  • 2012-04-02
  • 2013-07-20
  • 2015-05-23
  • 2018-03-08
  • 2011-05-16
  • 2013-04-28
  • 2021-02-08
相关资源
最近更新 更多