![](/img/trans.png)
[英]Swing JTable - Change background color of a row in function of the previous row
[英]Change row color in Swing JTable after sorting rows
我们正在使用一个JTable
,它显示数据和状态( New
、 Processed
、 Closed
)。 每个状态行都有不同的颜色,这是通过重载JTable
prepareRenderer()
实现的。
现在我们需要对该表进行排序,我们正在使用table.setAutoCreateRowSorter(true);
实现这一目标。 行得到正确排序,但行的颜色保持不变。 我们需要根据状态列将颜色重新应用于此操作后的所有行。
我想知道什么是实现这一目标的最佳方式。 我能想到的有几种方法:
mouseClicked
事件并确定是否单击了列标题然后手动调用prepareRenderer()
然后调用 repaint/revalidate我不知道该怎么做。 任何人都可以请提供有关实现这一目标的正确方法的见解吗?
为了使用setAutoCreateRowSorter(true)
更改JTable
单元格颜色,我在TableCellRenderer
使用了方法table.getRowSorter().convertRowIndexToModel(row)
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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.