이 질문은 this question을 기반으로합니다.JTree의 색상 행
노드가있는 레이어에 따라 트리가 다른 색으로 표시되기를 원합니다. 이 작품 잘 때 표준 groundNonSelectionColor
this is how it Looks right now
나는이 색이 JScrollPanel의 전체 폭을 커버 것을 원하는을 사용하여 메신저.
샘플 코드 :
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;
}
}
참고 : 내가 패널이 전혀 아무것도 표시되지 setPreferredSize
을 추가하는 경우합니다 (tree.getWidth()가 잘 작동) 와 위의 링크의 도움으로 전체 행과 텍스트 만 선택할 수있는 선택 배경을 얻을 수있었습니다.하지만 모든 행을 Color로 작업 할 수는 없습니다. Questino의 솔루션에 차이를 지정
은 위에 링크 : 질문에
이 항목을 선택하면 우리는 단지 색으로 전체 행을 연결. 내 문제는 항목이 선택되지 않은 경우 전체 행의 색상을 지정하는 것입니다 (링크 된 질문의 해결책에서 문제는 내 그림과 동일합니다!) - 항목이 선택 될 때 전체 줄이 색으로 표시됩니다. 색상을 해프닝 선택이 작동 수있는 노드/잎의 제목)
링크가 당신을 위해 작동하지에서 대답은? 나는 그것이 간단한 방법이라고 생각한다. – TomN
내가 연결된 질문과 내가 가진 질문 사이의 차이를 지정하기 위해 질문을 편집했습니다. – mayha