2

特定の値を含む行の背景色を変更するために、いくつかの ColorHighlighters を持つ JXTreeTable を使用しています。

行が選択されている場合、色は SelectionBackground に変わります。

完全な新しいレンダラーなしで、述語またはカラー ハイライターに基づいて選択の背景色を変更することは可能ですか?

編集:行が選択されていて強調表示されている場合、強調表示されていない行のように別の背景色にする必要があります。

SSCCE

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;
        }    
    }    
}

ここまで、ミョハネス

4

0 に答える 0