对于JTable中改变细胞的颜色与setAutoCreateRowSorter(真)我在的TableCellRenderer使用的方法table.getRowSorter()。convertRowIndexToModel(行)
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());
听起来你错过了一个convertRowIndexToModel的地方(假设状态在其他地方举行) – kleopatra
这是一个很好的指针kleopatra ...我正在研究这个方向,这可能最终导致解决方案。谢谢,我会在这里评论所有更新:) – mayur
我读了关于TableRowSorter的文档。它说:“JTable的基于行的方法和JTable的选择模型引用了视图而不是基础模型,因此有必要在两者之间进行转换。例如,要根据myModel获得选择,您需要将索引”。 它提供了一个利用convertRowIndexToModel()的代码。这意味着我的一般策略应该是将MouseListener与JTableHeader关联,并在mouseClicked()调用每行的convertRowIndexToModel时,然后在表上调用repaint()/ revalidate()。这种方法是否正确? – mayur