Swing 更改树的叶子的背景色

Swing 更改树的叶子的背景色,swing,background-color,jtree,Swing,Background Color,Jtree,想要在一个特定条件下更改树的唯一叶子的颜色 if (l_sel_node_object.getIsEnabled().trim().equalsIgnoreCase("N")) defaultTreeCellRenderer.setBackgroundSelectionColor(Color.red); 但它正在改变每个选定节点的背景。有人能帮我吗。仅在金属外观上测试: import java.awt.*; import javax.swing.*; import javax.swin

想要在一个特定条件下更改树的唯一叶子的颜色

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

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

仅在金属外观上测试:

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();
  }
}
//*/

import java.awt.*;
导入javax.swing.*;
导入javax.swing.tree.*;
公共类主面板{
公共JPanel makeUI(){
JTree树=新的JTree();
setCellRenderer(新的RedTreeCellRenderer());
JPanel p=新JPanel(新边界布局(5,5));
p、 添加(新的JScrollPane(树));
返回p;
}
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
@重写公共无效运行(){
createAndShowGUI();
}
});
}
公共静态void createAndShowGUI(){
JFrame f=新的JFrame();
f、 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f、 getContentPane().add(新建主面板().makeUI());
f、 设置大小(320240);
f、 setLocationRelativeTo(空);
f、 setVisible(真);
}
}
//*
类RedTreeCellRenderer扩展了DefaultTreeCellRenderer{
@重写公共组件GetTreeCellRenderComponent(
JTree树,对象值,选择布尔值,
布尔展开、布尔叶、整型行、布尔焦点){
JComponent c=(JComponent)super.gettreeCellrenderComponent(
树、值、isSelected、expanded、叶、行、hasFocus);
如果(当选){
c、 设置前景(getTextSelectionColor());
if(leaf&&value.toString().equalsIgnoreCase(“红色”)){
//
c、 set不透明(true);
//
c、 挫折地面(颜色:红色);
}否则{
c、 设置不透明(假);
c、 setBackground(getBackgroundSelectionColor());
}
}否则{
c、 设置不透明(假);
c、 设置前景(getTextNonSelectionColor());
c、 setBackground(getBackgroundNonSelectionColor());
}
返回c;
}
}
/*/
类RedTreeCellRender2扩展了DefaultTreeCellRenderer{
@重写公共组件GetTreeCellRenderComponent(
JTree树,对象值,选择布尔值,
布尔展开、布尔叶、整型行、布尔焦点){
JComponent c=(JComponent)super.gettreeCellrenderComponent(
树、值、isSelected、expanded、叶、行、hasFocus);
如果(当选){
如果(叶){
setSpecialCondition(value.toString());
}
c、 设置前景(getTextSelectionColor());
c、 setBackground(getBackgroundSelectionColor());
}否则{
c、 设置前景(getTextNonSelectionColor());
c、 setBackground(getBackgroundNonSelectionColor());
}
返回c;
}
布尔特殊条件=假;
私有void集合特殊条件(字符串str){
特殊条件=str.equalsIgnoreCase(“红色”);
}
@覆盖公共颜色getBackgroundSelectionColor(){
如果(特殊条件)返回Color.RED;
否则返回super.getBackgroundSelectionColor();
}
}
//*/

仅在金属外观上测试:

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();
  }
}
//*/

import java.awt.*;
导入javax.swing.*;
导入javax.swing.tree.*;
公共类主面板{
公共JPanel makeUI(){
JTree树=新的JTree();
setCellRenderer(新的RedTreeCellRenderer());
JPanel p=新JPanel(新边界布局(5,5));
p、 添加(新的JScrollPane(树));
返回p;
}
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
@重写公共无效运行(){
createAndShowGUI();
}
});
}
公共静态void createAndShowGUI(){
JFrame f=新的JFrame();
f、 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f、 getContentPane().add(新建主面板().makeUI());
f、 设置大小(320240);
f、 setLocationRelativeTo(空);
f、 setVisible(真);
}
}
//*
类RedTreeCellRenderer扩展了DefaultTreeCellRenderer{
@重写公共组件GetTreeCellRenderComponent(
JTree树,对象值,选择布尔值,
布尔展开、布尔叶、整型行、布尔焦点){
JComponent c=(JComponent)super.gettreeCellrenderComponent(
树、值、isSelected、expanded、叶、行、hasFocus);
如果(当选){
c、 设置前景(getTextSelectionColor());
if(leaf&&value.toString().equalsIgnoreCase(“红色”)){
//
c、 set不透明(true);
//
c、 挫折地面(颜色:红色);
}否则{
c、 设置不透明(假);
c、 setBackground(getBackgroundSelectionColor());
}
}否则{
c、 设置不透明(假);
c、 设置前景(getTextNonSelectionColor());
c、 setBackground(getBackgroundNonSelectionColor());
}
返回c;
}
}
/*/
类RedTreeCellRender2扩展了DefaultTreeCellRenderer{
@重写公共组件GetTreeCellRenderComponent(
JTree树,对象值,选择布尔值,
布尔展开、布尔叶、整型行、布尔焦点){
JComponent c=(JComponent)super.gettreeCellrenderComponent(
树、值、isSelected、expanded、叶、行、hasFocus);
如果(当选){
如果(叶){
setSpecialCondition(value.toString());
}
c、 设置前景(getTextSelectionColor());
c、 setBackground(getBackgroundSelectionColor());
}否则{
c、 设置前景(getTextNonSelectionColor());
c、 setBackground(getBackgroundNonSelectionColor());
}
返回c;
}
布尔特殊条件=假;
私有void集合特殊条件(字符串str){
特殊条件=str.equalsIgnoreCase(“红色”);
}
@覆盖公共颜色getBackgroundSelectionColor(){
如果(特殊条件)返回Color.RED;
否则返回super.getBackgroundSelectionColor();
}
}
//*/

请学习java命名约定并坚持它们。请学习java命名约定并坚持它们。嗯。。。故意在图标和文本下使用背景色?看。。。对我的眼睛不太好:—)@kleopatra指的是JTree绘画。信息技术