사용자 정의 selectionBackground를 JXTreeTable의 행에 설정하려고합니다. 사용자 정의 TreeCellRenderer를 설정하지 않으면이 작동합니다. 예제 에서처럼 추가로 설정하면 노드 텍스트의 selectionBackground가 기본 텍스트입니다. 어떤 아이디어를 어떻게 사용자 지정 하나 nodetext의 배경을 얻으려면? TreeCellRender 및 ColorHighlighter로 selectedBackground와 결합 된 JXTreeTable
import java.awt.Color;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import org.jdesktop.swingx.JXTreeTable;
import org.jdesktop.swingx.decorator.ColorHighlighter;
import org.jdesktop.swingx.decorator.HighlightPredicate;
import org.jdesktop.swingx.renderer.DefaultTreeRenderer;
import org.jdesktop.swingx.renderer.IconValue;
import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;
import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
public class TestHighlighter {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scrollPane = new JScrollPane();
frame.setContentPane(scrollPane);
JXTreeTable treeTable = new JXTreeTable(new DefaultTreeTableModel(new DefaultMutableTreeTableNode("Test")));
treeTable.setRootVisible(true);
scrollPane.setViewportView(treeTable);
DefaultTreeRenderer treeCellRenderer = new DefaultTreeRenderer(new IconValue() {
@Override
public Icon getIcon(Object value) {
return UIManager.getIcon("FileView.directoryIcon");
}
});
//Comment out next line and background is like set in Highlighter
treeTable.setTreeCellRenderer(treeCellRenderer);
treeTable.addHighlighter(new ColorHighlighter(HighlightPredicate.ALWAYS, null, null, Color.RED, null));
frame.pack();
frame.setVisible(true);
}
}
는 또한 노드의 아이콘을 변경 (사용자 정의의 TreeCellRenderer를 사용하지 않는)을 IconHighlighter를 사용하려고했으나 아이콘이 변경되지 않습니다.
treeTable.addHighlighter(new IconHighlighter(HighlightPredicate.ALWAYS, UIManager.getIcon("FileView.directoryIcon")));
선택 배경색 속성을 'Color.RED'로 설정하면 어떨까요? 이렇게 :'treeTable.setSelectionBackground (Color.red);'. 예상대로 작동합니까? – dic19
그게 실제로 작동하지만, 문제는, 내가 다른 selectionBackgrounds 노드의 의존하고 싶습니다. JTreeTable.applyRenderer (Component 구성 요소, ComponentAdapter 어댑터) –
TreeCellRenderer 하위 클래스가 DefaultTreeCellRenderer 인 경우에만 BackgroundSelectionColor가 설정되기 때문에 DefaultTreeCellRenderer를 TreeCellRenderer로 설정하면 작동합니다. swingx-renderer를 사용하면 좀 더 우아한 방법이 있다고 생각했습니다. –