swing设置字体颜色的一个问题

本文介绍了一种通过覆盖DefaultTableCellRenderer中的方法来改变JTable中特定行的字体颜色的方法,并解决了因父容器组件焦点变化导致的颜色混乱问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在系统中需要设置,表格中数据符合某中情况的行字体为绿色,使用覆盖DefaultTableCellRenderer中的方法去实现,发现父容器组件的焦点改变时可能导致颜色混乱,原因未知,必须重新加上对当行背景色,字体颜色的重新按照默认方式的手动设置的代码在前面才可解决,如下红色代码。

 private void setTbAbnormalColor(JTable tb) {
        int count = tb.getColumnModel().getColumnCount();
        for (int i = 1; i < count; i++) {
            tb.getColumnModel().getColumn(i).setCellRenderer(
                    new DefaultTableCellRenderer() {
                        public Component getTableCellRendererComponent(
                                JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                            super.getTableCellRendererComponent(table, value,
                                    isSelected, hasFocus, row, column);
                            if (row == table.getSelectedRow()) {
                                setForeground(table.getSelectionForeground());
                                setBackground(table.getSelectionBackground());
                            } else {
                                setForeground(table.getForeground());
                                setBackground(table.getBackground());
                            }
                            Merger curRow = (Merger) ((JTableListModel) table.getModel()).getDataByRow(row);
                            boolean isHandNoNull = curRow.getGoods().getHandBookNO() == null
                                    || curRow.getGoods().getHandBookNO().trim().length() == 0;
                            boolean isGoodsBackNoNull = curRow.getGoods().getGoodsBackNO() == null;
                            if (isHandNoNull && isGoodsBackNoNull) {
                                setForeground(Color.green);
                            }
                            return this;
                        }
                    });
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值