Diese Frage basiert auf this question.Farbreihen in JTree
Ich möchte, dass der Baum auf der Ebene der Knoten unterschiedlich gefärbt ist. Diese Arbeit nur gut, wenn im die Standard-groundNonSelectionColor
this is how it Looks right now
Ich möchte mit, dass diese Farbe über die gesamte Breite des JScrollPanel abdeckt.
Beispielcode:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Rectangle;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
public class Main extends JFrame {
public Main(){
JFrame f = new JFrame();
JTree tree = new JTree();
MyTreeCellRenderer renderer = new MyTreeCellRenderer();
tree.setCellRenderer(renderer);
JScrollPane p = new JScrollPane(tree);
f.getContentPane().add(BorderLayout.CENTER,p);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400,400);
}
public static void main(String[] args) {
new Main();
}
public static class MyTreeCellRenderer extends DefaultTreeCellRenderer{
public Component getTreeCellRendererComponent(JTree tree,Object value,boolean sel,
boolean expanded,boolean leaf,int row,boolean hasFocus) {
JComponent component = (JComponent)super.getTreeCellRendererComponent(tree, value, sel,expanded, leaf, row,hasFocus);
if (getRowOfNode(value) != -1) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
switch (getRowOfNode(value)){
//Different Level - Different Colors => 1 == Root
case 1: component.setBackground(Color.RED);break;
case 2: component.setBackground(Color.BLUE);component.setForeground(Color.WHITE);break;
case 3: component.setBackground(Color.YELLOW);break;
}
}
//component.setPreferredSize(new Dimension(tree.getWidth(),tree.getRowHeight()));
component.setOpaque(true);
return component;
}
}
public static int getRowOfNode(Object value){
if(value instanceof DefaultMutableTreeNode){
DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
return node.getPath().length;
}
return -1;
}
}
Hinweis: wenn i setPreferredSize
das Gremium hinzufügen nicht überhaupt etwas zu zeigen (die tree.getWidth() funktioniert gut) mit Mit der Hilfe des obigen Links konnte ich die Auswahl Hintergrund über die ganze Zeile und nicht nur über den Text erreichen, aber ich bin nicht in der Lage, es so zu machen, alle Zeilen zu färben.
den Unterschied zur Lösung des Questino Angeben oben verlinkten:
In der Frage verknüpft die gesamte Zeile wir nur gefärbt werden, wenn die Option ausgewählt wird. Mein Problem besteht darin, die gesamte Zeile zu färben, wenn die Elemente nicht ausgewählt sind (in der Lösung der verknüpften Frage ist das Problem das gleiche wie in meinem Beispielbild!) - die ganze Zeile wird nur gefärbt, wenn ein Element ausgewählt ist - falls nein der Auswahl der Farb Happening wird auf den Titel des Knotens/Blatt reduziert werden)
ist die Antwort von der Link nicht für Sie arbeiten? Ich denke, das ist ein einfacher Weg. – TomN
Ich bearbeitet die Frage, um den Unterschied zwischen der Frage, die ich verknüpfte, und dem Problem, das ich habe – mayha