You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何让表格选中/点击的行永久从红色变为白色?

解决JTable选中行颜色切换问题

要实现选中行变白、未选中行变红的效果,不能靠ActionListener临时修改颜色——因为Swing表格每次重绘都会调用渲染器覆盖你设置的临时样式,必须通过自定义TableCellRenderer来控制行的外观,这是Swing组件渲染的标准方式。

步骤1:自定义表格单元格渲染器

继承DefaultTableCellRenderer,重写getTableCellRendererComponent方法,根据行是否选中设置对应背景色:

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;

class CustomRowRenderer extends DefaultTableCellRenderer {
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        // 先调用父类方法初始化默认样式
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        
        // 根据选中状态设置背景色
        if (isSelected) {
            setBackground(Color.WHITE);
            setForeground(Color.BLACK); // 可选:设置选中时的文字颜色
        } else {
            setBackground(Color.RED);
            setForeground(Color.WHITE); // 可选:设置未选中时的文字颜色
        }
        
        return this;
    }
}

步骤2:将渲染器绑定到表格

把自定义渲染器设置为表格的默认渲染器,这样所有列都会使用这个规则:

// 假设你的表格实例是JTable table
table.setDefaultRenderer(Object.class, new CustomRowRenderer());

为什么之前的方法无效?

  • 用getRowSelected()临时改颜色:表格在选中、取消选中或窗口刷新时会自动重绘,渲染器会重新计算行样式,临时设置的颜色会被覆盖。
  • 渲染器是Swing控制组件外观的核心机制,所有表格行的显示逻辑都由它统一处理,能保证样式始终符合预期。

内容的提问来源于stack exchange,提问作者msa5anforlife

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:00:54