我试图编写一个方法,对于给定的参数(值,颜色),在一个值等于cellValue的单元格的背景上设置颜色。
我的方法实际上是做什么的,它在整行的单元格背景上设置颜色,当我在表格上选择行时,我希望方法只在特定列设置颜色(其中cellValue等于值)每次我打电话给这个方法。
void setCellBackgroundColor(boolean cellValue, final Color color) {
List<List<Object>> data = tView.getTTableModel().getData();
for (int row = 0; row < data.size(); row++) {
for (int col = 0; col < data.get(row).size(); col++) {
TableCellRenderer renderer = tView.table.getCellRenderer(row, Col);
Component component = tView.table.prepareRenderer(renderer, row, col);
boolean bValue =
TDataTypeRenderer.parseIntoRealValue(
data.get(row).get(col)
)
);
if (bValue == cellValue) {
component.setBackground(color);
}
}
答案 0 :(得分:9)
当我选择表格上的行时,我希望方法只在特定列设置颜色
尝试使用@mKorbel建议的重写prepareRenderer()
方法。
示例代码:
Object[] columnNames = { "A", "B", "C", "D" };
Object[][] data = {
{ "abc", new Double(850.503), 53, true },
{ "lmn", new Double(36.23254), 6, false },
{ "pqr", new Double(8.3), 7, false },
{ "xyz", new Double(246.0943), 23, true } };
JTable table = new JTable(data, columnNames) {
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
Component comp = super.prepareRenderer(renderer, row, col);
Object value = getModel().getValueAt(row, col);
if (getSelectedRow() == row) {
if (value.equals(false)) {
comp.setBackground(Color.red);
} else if (value.equals(true)) {
comp.setBackground(Color.green);
} else {
comp.setBackground(Color.white);
}
} else {
comp.setBackground(Color.white);
}
return comp;
}
};
选择第一行时:
选择第二行时。
根据您的上一条评论
是否可以通过单击(选择)表格上的行来更改颜色?
是的,只需删除所选行的检查。
Object value = getModel().getValueAt(row, col);
if (value.equals(false)) {
comp.setBackground(Color.red);
} else if (value.equals(true)) {
comp.setBackground(Color.green);
} else {
comp.setBackground(Color.white);
}