更改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

回到顶部