我正在尝试为 JXTreeTable 中的行设置自定义 selectionBackground。如果我没有设置自定义 TreeCellRenderer,这将有效。如果我像在我的示例中那样另外设置它,则节点文本的 selectionBackground 是默认值。任何想法如何将节点文本的背景设置为自定义背景?
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);
}
}
我还尝试使用IconHighlighter(避免使用自定义TreeCellRenderer)来更改节点的图标,但图标没有改变。
treeTable.addHighlighter(new IconHighlighter(HighlightPredicate.ALWAYS, UIManager.getIcon("FileView.directoryIcon")));