如何将我的JTable中第一行的颜色设置为黄色(或任何颜色)?

时间:2009-06-29 10:57:32

标签: java swing background-color

我可以将一列设置为黄色,但我无法将行设置为黄色。

以下代码用于列:

TableColumn col = mytable.getColumnModel().getColumn(0);

col.setCellRenderer(new MyTableCellRenderer());

请问我该怎么做呢?

我在网上尝试了教程和示例,但它总是将整个表格描绘成黄色而不是仅仅一行。

由于

5 个答案:

答案 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