DefaultTreeCellRenderer Hintergrundfarbe

P

Polo488

Gast
Hallo Zusammen ich möchte gerne in meinem JTREE, je nach ebene ein andere Hintergrundfarbe(Komplette Zeile) haben, dafür habe ich mir folgendes Beispiel angeschaut.
http://www.java-forum.org/java-faq-beitraege/23426-jtree-teil-3-darstellung-daten.html

Und so umgesetzt
Java:
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;

// Für die TreeIcons
public class MyRenderer extends DefaultTreeCellRenderer {
	
    Icon DataBaseIcon;
    Icon TableIcon;
    Icon FieldIcon; 
	
    public MyRenderer(){
    	DataBaseIcon = new ImageIcon("Icon/database-icon.png");
    	TableIcon = new ImageIcon("Icon/Windows-Table-icon.png");
    	FieldIcon = new ImageIcon("Icon/Field.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);
        DefaultMutableTreeNode ItemValue = (DefaultMutableTreeNode)value;
        if (ItemValue.getUserObject() instanceof CustomTreeItem){
        	       
          CustomTreeItem Item =(CustomTreeItem)ItemValue.getUserObject();       
          if(Item.getHierachie()== Global.TreeHierachie.DataBase){
        	setIcon(DataBaseIcon);
          }
          if(Item.getHierachie()== Global.TreeHierachie.Table){
        	setIcon(TableIcon);
          }
          if(Item.getHierachie()== Global.TreeHierachie.Field){
        	setIcon(FieldIcon);
                setBackground(Color.red);//funktioniert nicht
          }
        }
        return this;
    }
}

Die Hintergrundfarbe wird nicht verändert
 

Michael...

Top Contributor
Das TreeUI ist ziemlich komplex. Hier mal ein Bsp. mit einer überschriebenen Methode des BasicTreeUI. Damit wird die Zeile zumindest nach hinten komplett "gefüllt". Kannst Dir ja mal die paintRow() des UIs anschauen.
Java:
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Rectangle;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.plaf.basic.BasicTreeUI;
import javax.swing.tree.TreePath;

public class TreeLineSelectionDemo extends JFrame {
	
	private int width=0;
	
	public TreeLineSelectionDemo() {
		
		JTree tree = new JTree() {
			public void paintComponent(Graphics g) {
				width = this.getWidth();
				super.paintComponent(g);
			}
		};
		BasicTreeUI ui = new BasicTreeUI() {
			protected void paintRow(Graphics g, Rectangle clipBounds, Insets insets, Rectangle bounds, TreePath path, int row, boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf) {
				bounds.width = width - bounds.x;
				super.paintRow(g, clipBounds, insets, bounds, path, row, isExpanded, hasBeenExpanded, isLeaf);
			}
		};
		tree.setUI(ui);
		JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(tree), new JLabel("Hallo", JLabel.CENTER));
		this.getContentPane().add(split);
	}
	
	public static void main(String[] args) {
		JFrame frame = new TreeLineSelectionDemo();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
Man könnte sich auch überlegen eine JList zu verwenden. Da ist die gestalterische Freiheit etwas größer/einfacher. Letztendlich ist ja ein JTree nichts anderes als eine "klappbare" Liste.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G DefaultTreeCellRenderer - setFont Java Basics - Anfänger-Themen 4
G DefaultTreeCellRenderer auf Änderung reagieren Java Basics - Anfänger-Themen 11
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
B JPanel ändert die Hintergrundfarbe nicht Java Basics - Anfänger-Themen 2
M TableModel Hintergrundfarbe Java Basics - Anfänger-Themen 6
P Hintergrundfarbe aus drei Scrollbars Java Basics - Anfänger-Themen 5
B Die Hintergrundfarbe eines deaktivierten buttons ändern? Java Basics - Anfänger-Themen 4
I Netbeans - jTabbedPane Hintergrundfarbe ändern Java Basics - Anfänger-Themen 13
C Panel Hintergrundfarbe per AdjustmenListenmer ändern Java Basics - Anfänger-Themen 4
I Hintergrundfarbe einer Zelle in einer JTable Java Basics - Anfänger-Themen 10
B Hintergrundfarbe laufend verändern Java Basics - Anfänger-Themen 14
P Hintergrundfarbe einer anderen Klasse ändern Java Basics - Anfänger-Themen 7
C Hintergrundfarbe Java Basics - Anfänger-Themen 7
U JPanel und Hintergrundfarbe Java Basics - Anfänger-Themen 5
S Hintergrundfarbe lässt sich nicht ändern Java Basics - Anfänger-Themen 3
S Hintergrundfarbe lässt sich nicht ändern Java Basics - Anfänger-Themen 2
B JTable und Hintergrundfarbe Java Basics - Anfänger-Themen 5
G Transparente Hintergrundfarbe eines Applets Java Basics - Anfänger-Themen 8
J Hintergrundfarbe für Textfelder Java Basics - Anfänger-Themen 4
G Hintergrundfarbe eines JLabels Java Basics - Anfänger-Themen 3
K Hintergrundfarbe einer Tabellen-Zelle verändern Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben