2015-03-05 3 views
0

Я читал много учебников, но мне это не помогает. У меня есть jTree, который работает, и setForeground работает отлично, но когда я хочу setBackground, поэтому jTree без изменений. Можете ли вы мне помочь, как писать. Благодарю.JTree - как установитьНазад для узла

import java.awt.Color; 
import java.awt.Component; 

import javax.swing.Icon; 
import javax.swing.ImageIcon; 
import javax.swing.JTree; 
import javax.swing.tree.DefaultMutableTreeNode; 
import javax.swing.tree.DefaultTreeCellRenderer; 


public class UrlNodeRenderer extends DefaultTreeCellRenderer { 

    public static Icon icon = null; 

    public UrlNodeRenderer() { 
     icon = new ImageIcon(getClass().getResource("icon.png")); 
    } 

    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { 
     super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); 

     setOpenIcon(icon); 
     setClosedIcon(icon); 
     setLeafIcon(icon); 

     UrlTreeNode node = (UrlTreeNode) (((DefaultMutableTreeNode) value).getUserObject()); 
     if(node.isContainsPhrase()) { 
      setForeground(Color.BLUE); 
      setBackground(Color.PINK); // doesn't works 
     } 

     return this; 
    } 
} 
+0

это.getContentPane(). SetBackground (Color.PINK); –

+0

Этот объект и его родители не поддерживают метод "" getContentPane() ", но есть метод" getRootPane() ", но с этим методом он сбой.: -/ – basfot

ответ

0

Вы должны использовать setOpaque(true); на вашем TreeCellRenderer, чтобы изменить цвет фона. Вы можете добавить его в конструктор:

public UrlNodeRenderer() { 
    icon = new ImageIcon(getClass().getResource("icon.png")); 
    setOpaque(true); 
} 

enter image description here

EDIT: Вам нужно изменить цвет фона в ложных и истинных случаев, как в следующем:

private class Renderer extends DefaultTreeCellRenderer{ 

     public Renderer() { 
      setOpaque(true); 
     } 
     @Override 
     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); 
      setBackground(selected ? Color.LIGHT_GRAY : 
       (leaf ? Color.GRAY : tree.getBackground())); 
      return this; 
     } 

    } 

В вашем случае:

if(node.isContainsPhrase()) { 
     setForeground(Color.BLUE); 
     setBackground(Color.PINK); // doesn't works 
} 

вы установили цвет для всех узлов, потому что вы никогда установить цвет для ложного случая.

+0

Этот код устанавливает backgrounf дерева, но целое дерево. Мне нужно установить фон только для узла, когда это условие (node.isContainsPhrase()) правильно в моем примере. Любая другая идея? – basfot

+0

Вы попробовали? Он задал цвет для объекта визуализации, вам нужно установить цвет по умолчанию в ложном случае, поскольку рендерер не сделайте это за вас. – alex2410

+0

Спасибо большое. Все еще настройки ложного случая это мне помогает. Это именно то, что мне нужно. – basfot

Смежные вопросы