use*_*ser 20 java jtable tablecellrenderer
我有一个有3列的JTable.我已经设置了TableCellRenderer所有3列这样的(可能不是很有效?).
for (int i = 0; i < 3; i++) {
myJTable.getColumnModel().getColumn(i).setCellRenderer(renderer);
}
Run Code Online (Sandbox Code Playgroud)
将getTableCellRendererComponent()返回一个随机的背景颜色为每行一个组件.
在程序运行时如何将背景更改为其他随机颜色?
Oli*_*eux 25
Richard Fearn的回答,让每一行都变成灰色:
jTable.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
{
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(row % 2 == 0 ? Color.LIGHT_GRAY : Color.WHITE);
return c;
}
});
Run Code Online (Sandbox Code Playgroud)
Ric*_*arn 21
一种方法是存储模型中每行的当前颜色.这是一个固定在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);
}
}
Run Code Online (Sandbox Code Playgroud)
注意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;
}
}
Run Code Online (Sandbox Code Playgroud)
更改行的颜色将如下所示:
model.setRowColour(1, Color.YELLOW);
Run Code Online (Sandbox Code Playgroud)