java - 对行进行排序后更改 Swing JTable 中的行颜色

标签 java swing jtable tablerowsorter

我们正在使用 JTable,它显示数据和状态(NewProcessedClosed)。每个状态行都有不同的颜色,这是通过重载 JTableprepareRenderer() 实现的。

现在我们需要对该表进行排序,我们正在使用 table.setAutoCreateRowSorter(true); 来实现它。行得到正确排序,但行的颜色保持不变。在此操作后,我们需要根据状态列将颜色重新应用到所有行。

我想知道实现该目标的最佳方法是什么。我能想到的有几种方法:

  1. 重新绘制/重新验证表格。但我认为仅仅这样做是行不通的。
  2. 捕获 mouseClicked 事件并确定是否单击了列标题然后手动调用 prepareRenderer() 然后调用 repaint/revalidate
  3. 然后我阅读了这里的一个问题,其中提到的一个答案是不直接调用 repaint/revalidate,而是更改底层数据模型,它会自动调用上述方法。

我不知道该怎么办。谁能提供有关实现此目标的正确方法的见解?

最佳答案

要使用 setAutoCreateRowSorter(true) 更改 JTable 中的单元格颜色,我在我的方法中使用了方法 table.getRowSorter().convertRowIndexToModel(row) TableCellRenderer

import javax.swing.*;

import javax.swing.table.DefaultTableCellRenderer;

import javax.swing.table.TableModel;

import java.awt.*;

public class OwnTableCellRenderer extends DefaultTableCellRenderer {

    public OwnTableCellRenderer() {
        super();
        setOpaque(true);
    }

    public Component getTableCellRendererComponent(JTable table, 
                                                   Object value,
                                                   boolean isSelected,
                                                   boolean hasFocus, 
                                                   int row, 
                                                   int column) {

        setBackground(Color.white);
        setForeground(Color.black);

        TableModel model = table.getModel();
        int modelRow = table.getRowSorter().convertRowIndexToModel(row);
        int columnStatusPosition = 5;
        String statusColumnValue = (String) model.getValueAt(modelRow, columnStatusPosition);

        if (statusColumnValue.equals("ACTIVE")) {
            if (isSelected) {
                setBackground(Color.green);
            } else {
                setBackground(Color.yellow);
            }
        }

        setText(value != null ? value.toString() : "");
        return this;
    }
}

然后

table.setDefaultRenderer(Object.class, new OwnTableCellRenderer());

关于java - 对行进行排序后更改 Swing JTable 中的行颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785166/

相关文章:

java - 从 Java 并发获取 Perl 输出

java - 如何将2个JComponent添加到JPanel的同一位置

java - JTable 中的单元格验证

java - com.sun.mail.smtp.SMTPSendFailedException : 550 Access denied - Invalid HELO name (See RFC2821 4. 1.1.1)

Javadoc 生成失败 : ClassCastException: com. sun.tools.javadoc.ClassDocImpl 无法转换为 com.sun.javadoc.AnnotationTypeDoc

java - 将X509证书标签值转换为数字签名cxf wss4j中的base64二进制编码

java - 如何使用绑定(bind)类通过代码将 JComboBox selectedItem 绑定(bind)到 Jtable?

java - 重用PreparedStatement会导致SQLException

java - 如何填充有关布局管理器的剩余空间?

java - DefaultTableModel setDataVector 将旧行附加到新行