Java JXTreeTable上的ColorHighlighter-如果谓词为true,则更改选择颜色

Java JXTreeTable上的ColorHighlighter-如果谓词为true,则更改选择颜色,java,swing,swingx,jxtreetable,swing-highlighter,Java,Swing,Swingx,Jxtreetable,Swing Highlighter,我正在使用一个带有多个彩色高亮灯的JXTreeTable来更改包含特定值的行的背景色 如果选择了一行,则颜色将更改为SelectionBackground 是否可以在不使用全新渲染器的情况下,根据谓词或颜色高亮显示更改选择背景颜色 编辑: 如果选择了一行并有高亮显示,则应在没有高亮显示的行上使用另一种背景色 SSCCE 封装测试; 导入java.awt.Color; 导入java.awt.Component; 导入javax.swing.JFrame; 导入javax.swing.JScroll

我正在使用一个带有多个彩色高亮灯的JXTreeTable来更改包含特定值的行的背景色

如果选择了一行,则颜色将更改为SelectionBackground

是否可以在不使用全新渲染器的情况下,根据谓词或颜色高亮显示更改选择背景颜色

编辑: 如果选择了一行并有高亮显示,则应在没有高亮显示的行上使用另一种背景色

SSCCE

封装测试;
导入java.awt.Color;
导入java.awt.Component;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入org.jdesktop.swingx.JXTreeTable;
导入org.jdesktop.swingx.decorator.ColorHighlighter;
导入org.jdesktop.swingx.decorator.ComponentAdapter;
导入org.jdesktop.swingx.decorator.HighlightPredicate;
导入org.jdesktop.swingx.treetable.AbstractMutableTreeTableNode;
导入org.jdesktop.swingx.treetable.DefaultTreeTableModel;
公共类JXTreeTableDemo扩展了JFrame{
公共静态void main(字符串[]args){
JXTreeTableDemo gui=新的JXTreeTableDemo();
//获取根节点和20个子节点
ArrayNode根=新ArrayNode(新对象[]{“根”,“根]”});
对于(int i=0;i<20;i++){
add(新的ArrayNode(新对象[]{“child”,i}));
}
//获取表并添加根节点
JXTreeTable=新的JXTreeTable(新的DefaultTreeTableModel(根));
JScrollPane-scrPane=新的JScrollPane(表);
//谓词以突出显示所有值%3==0
HighlightPredicate谓词emod3=新的HighlightPredicate(){
@凌驾
公共布尔isHighlighted(组件渲染器,
组件适配器(适配器){
如果((int)adapter.getValue(1)%3==0){
返回true;
}
返回false;
}
};
//谓词以突出显示所有值%4==0
HighlightPredicate谓词emod4=新的HighlightPredicate(){
@凌驾
公共布尔isHighlighted(组件渲染器,
组件适配器(适配器){
if((int)adapter.getValue(1)%4==0){
返回true;
}
返回false;
}
};
//初始化%3 div的荧光灯
ColorHighlighter highlighterMod3=新的ColorHighlighter(谓词D3,
颜色。蓝色,颜色。白色);
//初始化%4 div的荧光灯
ColorHighlighter highlighterMod4=新的ColorHighlighter(谓词EMOD4,
颜色。绿色,颜色。白色);
//添加荧光灯
表.添加荧光灯(荧光灯模块3);
表.添加荧光灯(荧光灯模块4);
gui.getContentPane().add(scrPane);
setVisible(true);
gui.pack();
}
//抽象可变树型节点的具体类
静态类ArrayNode扩展AbstractMutableTreeTableNode{
公共ArrayNode(对象[]数据){
超级(数据);
}
@凌驾
公共对象getValueAt(int列){
返回getUserObject()[列];
}
@凌驾
public void setValueAt(对象值,int列){
getUserObject()[column]=aValue;
}
@凌驾
public int getColumnCount(){
返回2;
}
@凌驾
公共对象[]getUserObject(){
返回(Object[])super.getUserObject();
}
@凌驾
公共布尔值可编辑(int列){
返回true;
}    
}    
}
到目前为止,,
mjohannes

彩色荧光灯有选择的前景/背景属性:-)哦,嗯,好的。。。谢谢;-)它起作用了
package testing;

import java.awt.Color;
import java.awt.Component;

import javax.swing.JFrame;
import javax.swing.JScrollPane;

import org.jdesktop.swingx.JXTreeTable;
import org.jdesktop.swingx.decorator.ColorHighlighter;
import org.jdesktop.swingx.decorator.ComponentAdapter;
import org.jdesktop.swingx.decorator.HighlightPredicate;
import org.jdesktop.swingx.treetable.AbstractMutableTreeTableNode;
import org.jdesktop.swingx.treetable.DefaultTreeTableModel;

public class JXTreeTableDemo extends JFrame {

    public static void main(String[] args) {

        JXTreeTableDemo gui = new JXTreeTableDemo();

        // get root node and 20 child nodes
        ArrayNode root = new ArrayNode(new Object[] { "root", "" });
        for (int i = 0; i < 20; i++) {
            root.add(new ArrayNode(new Object[] { "child", i }));
        }

        // get table and add root node
        JXTreeTable table = new JXTreeTable(new DefaultTreeTableModel(root));
        JScrollPane scrPane = new JScrollPane(table);

        // predicate to highlight all VAL%3==0
        HighlightPredicate predicateMod3 = new HighlightPredicate() {

            @Override
            public boolean isHighlighted(Component renderer,
                    ComponentAdapter adapter) {
                if ((int) adapter.getValue(1) % 3 == 0) {
                    return true;
                }
                return false;
            }

        };

        // predicate to highlight all VAL%4==0
        HighlightPredicate predicateMod4= new HighlightPredicate() {

            @Override
            public boolean isHighlighted(Component renderer,
                    ComponentAdapter adapter) {
                if ((int) adapter.getValue(1) % 4 == 0) {
                    return true;
                }
                return false;
            }

        };

        // initialize highlighter for %3 div 
        ColorHighlighter highlighterMod3 = new ColorHighlighter(predicateMod3,
                Color.BLUE, Color.WHITE);           
        // initialize highlighter for %4 div
        ColorHighlighter highlighterMod4 = new ColorHighlighter(predicateMod4,
                Color.GREEN, Color.WHITE);    
        // add highlighter 
        table.addHighlighter(highlighterMod3);
        table.addHighlighter(highlighterMod4);          
        gui.getContentPane().add(scrPane);
        gui.setVisible(true);
        gui.pack();
    }

    // concrete class of AbstractMutableTreeTableNodes
    static class ArrayNode extends AbstractMutableTreeTableNode {

        public ArrayNode(Object[] data) {
            super(data);
        }

        @Override
        public Object getValueAt(int column) {
            return getUserObject()[column];
        }

        @Override
        public void setValueAt(Object aValue, int column) {
            getUserObject()[column] = aValue;
        }

        @Override
        public int getColumnCount() {
            return 2;
        }

        @Override
        public Object[] getUserObject() {
            return (Object[]) super.getUserObject();
        }

        @Override
        public boolean isEditable(int column) {
            return true;
        }    
    }    
}