首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置JXTreeTable第一列的背景色

如何设置JXTreeTable第一列的背景色
EN

Stack Overflow用户
提问于 2015-08-06 14:42:27
回答 1查看 447关注 0票数 1

我有一个JXTreeTable,我实现了一个定制的渲染器。

所以我有个密码:

代码语言:javascript
复制
public class CustomTreeTableSpeseXCategoriaSpese extends JLabel implements TreeCellRenderer, TableCellRenderer {
    /**
     * 
     */
    private static final long serialVersionUID = 4842418316518803090L;
    private Font fontTotale = new Font("Verdana", Font.BOLD, 12);
    private Font fontNegativo = new Font("Verdana", Font.BOLD, 12);

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, 
            boolean isSelected, boolean hasFocus, int row, int column) {
        setOpaque(true);
        setHorizontalAlignment(SwingConstants.RIGHT);
        if (row== table.getRowCount()-1) {
            setForeground(Color.BLACK);
            setBackground( Color.RED );
            setFont(fontTotale);
        }else if(row != table.getRowCount() && column !=3){
            setForeground( Color.BLACK );
            setBackground(new Color(200, 200, 200));
            setFont(UtilitySwing.getTableFont());
        }else if(row != table.getRowCount()-1 && column ==3){
            //verifico il valore se negativo rosso
            //se positivo blu
            String valore = value.toString();
            if(valore.startsWith("-")){
                setForeground(Color.red);
                setFont(fontNegativo);
            }else{
                setForeground(Color.blue);
                setFont(fontNegativo);
            }
        }
         setText(value != null ? value.toString() : "<null>");
        return this;
    }

    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        setOpaque(true);
        if (row== tree.getRowCount()-1) {
            setForeground(Color.BLACK);
            setOpaque(true);
            setBackground( Color.RED );
            setFont(fontTotale);
        }else if(row != tree.getRowCount()){
            setForeground( Color.BLACK );
            setBackground(new Color(200, 200, 200));
            setOpaque(true);
            setFont(UtilitySwing.getTableFont());
        }
         setText(value != null ? value.toString() : "<null>");
        return this;
    }
} 

这是创建JXTreeTable的代码:

代码语言:javascript
复制
    public JTreeTable(){
JXTreeTable talbe = new JXTreeTable();
        talbe .setTreeTableModel(new RandomTextTreeTableModel(listaConti));
        talbe .setDefaultRenderer(Object.class, new CustomTreeTableSpeseXCategoriaSpese());
        talbe .setTreeCellRenderer(new CustomTreeTableSpeseXCategoriaSpese());
    }

如果我试图运行这段代码,我可以显示如下:

如果我尝试打开第一个节点,我可以看到以下内容:

我想要这样: 1)显示完整的文本2)如何可以看到,从图像,我想设置背景颜色灰色的所有第一列。我怎么能修好它?

编辑

这个帖子不是重复的,因为在segnalation文章中有JTree,但是在我的帖子中,我有JXTreeTable,它是不同的。

EN

回答 1

Stack Overflow用户

发布于 2017-06-29 09:34:25

这可以使用org.jdesktop.swingx.decorator.HighlightPredicate

代码语言:javascript
复制
HighlightPredicate hlPred = new HighlightPredicate() {
    @Override
    public boolean isHighlighted(Component renderer,
            ComponentAdapter adapter) {
        return someCondition ? true : false;
    }
};

ColorHighlighter hl = new ColorHighlighter(hlPred, hlBgColor, hlFColor);
treeTable.addHighlighter(hl);

另见this SO question

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31858772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档