更改JTable中一行的背景颜色
我有一个3列的JTable。我已经TableCellRenderer
为所有3列设置了这样的代码(也许不是很有效?)。
for (int i = 0; i < 3; i++) { myJTable.getColumnModel().getColumn(i).setCellRenderer(renderer);
}
在getTableCellRendererComponent()
一个随机的背景颜色为每一行返回一个组件。
程序运行时如何将背景更改为其他随机颜色?
回答:
一种方法是存储模型中每一行的当前颜色。这是一个固定在3列3行的简单模型:
static class MyTableModel extends DefaultTableModel { List<Color> rowColours = Arrays.asList(
Color.RED,
Color.GREEN,
Color.CYAN
);
public void setRowColour(int row, Color c) {
rowColours.set(row, c);
fireTableRowsUpdated(row, row);
}
public Color getRowColour(int row) {
return rowColours.get(row);
}
@Override
public int getRowCount() {
return 3;
}
@Override
public int getColumnCount() {
return 3;
}
@Override
public Object getValueAt(int row, int column) {
return String.format("%d %d", row, column);
}
}
注意setRowColour
通话fireTableRowsUpdated
; 这将导致仅更新表的该行。
渲染器可以从表中获取模型:
static class MyTableCellRenderer extends DefaultTableCellRenderer { @Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
MyTableModel model = (MyTableModel) table.getModel();
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(model.getRowColour(row));
return c;
}
}
更改行的颜色很简单:
model.setRowColour(1, Color.YELLOW);
以上是 更改JTable中一行的背景颜色 的全部内容, 来源链接: utcz.com/qa/407562.html