我可以将一列设置为黄色,但我无法将行设置为黄色。
以下代码用于列:
TableColumn col = mytable.getColumnModel().getColumn(0);
col.setCellRenderer(new MyTableCellRenderer());
请问我该怎么做呢?
我在网上尝试了教程和示例,但它总是将整个表格描绘成黄色而不是仅仅一行。
由于
答案 0 :(得分:3)
您需要做的是生成自定义TableCellRenderer。有关详细信息,请参阅this tutorial。您的渲染器需要测试传入的行索引并确定它是否为0行。
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
if (row == 0) {
setBackground(myBGColor)
}
....
答案 1 :(得分:2)
来自"How to use tables" tutorial:
要指定特定于单元格的渲染器,您需要定义一个覆盖getCellRenderer方法的JTable子类。例如,以下代码使表的第一列中的第一个单元格使用自定义渲染器:
TableCellRenderer weirdRenderer = new WeirdRenderer();
table = new JTable(...) {
public TableCellRenderer getCellRenderer(int row, int column) {
if ((row == 0) && (column == 0)) {
return weirdRenderer;
}
// else...
return super.getCellRenderer(row, column);
}
};
您只需检查行== 0 then
使用您自己的渲染器,else
使用默认值。
答案 2 :(得分:2)
我通常通过实现包装另一个TableCellRenderer的装饰器风格的TableCellRenderer实现来解决这个问题。这样,您可以为每列保留特定于类型的渲染器,但将每个渲染器包装在负责行突出显示的装饰器渲染器中。
这是我写的一个例子,它使用这种方法将每个备用行的背景设置为浅灰色。
public class AlternateRowRenderer implements TableCellRenderer {
private final TableCellRenderer wrappedRenderer;
public AlternateRowRenderer(TableCellRenderer wrappedRenderer, Color highlightColour) {
this.wrappedRenderer = wrappedRenderer;
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component ret = wrappedRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
ret.setBackground(getTableBackgroundColour(table, value, isSelected, hasFocus, row, column));
return ret;
}
@SuppressWarnings({"UnusedDeclaration"})
public static Color getTableBackgroundColour(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Color ret;
if (row % 2 != 0) {
ret = isSelected ? ColourUtil.mergeColours(LIGHT_GREY, table.getSelectionBackground(), 0.75) : LIGHT_GREY;
} else {
ret = isSelected ? table.getSelectionBackground() : table.getBackground();
}
return ret;
}
}
答案 3 :(得分:1)
为了便于设置备用行颜色,您可以使用SwingX创建JXTable(与JTable相同+一些很酷的额外功能),如:
myTabModel = new MyTableModel();
tab = new JXTable(myTabModel);
Color baseBackground = new Color(0,0,0,0); // no color
Color alternateBackround = new Color(250,150,250,100); // a fading purple color
tab.setHighlighters(HighlighterFactory.createAlternateStriping(baseBackground,alternateBackround);
请注意,第一行将具有baseBackground
颜色
希望有所帮助
答案 4 :(得分:0)
您可以为jtable行设置替代颜色。请查看zybocodes