2

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

以下代码为该列执行此操作:

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

col.setCellRenderer(new MyTableCellRenderer());

请问如何连续做?

我已经尝试过网上的教程和示例,但它总是将整个表格涂成黄色,而不仅仅是一行。

谢谢

4

5 回答 5

3

你需要做的是生成一个自定义的 TableCellRenderer。有关详细信息,请参阅本教程。您的渲染器将需要测试传入的行索引并确定它是否为第 0 行。

 public Component getTableCellRendererComponent(JTable table,
                                    Object value,
                                    boolean isSelected,
                                    boolean hasFocus,
                                    int row,
                                    int column) {
     if (row == 0) {
         setBackground(myBGColor)
     }
     ....
于 2009-06-29T11:10:06.573 回答
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;
    }
}
于 2009-06-29T11:38:36.500 回答
2

来自“如何使用表格”教程

要指定特定于单元格的渲染器,您需要定义一个覆盖 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);
    }
};

您可以简单地检查 row == 0then使用您自己的渲染器,else使用默认值。

于 2009-06-29T11:10:42.390 回答
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颜色

希望能帮助到你

于 2011-04-03T19:58:57.447 回答
0

您可以为 jtable 行设置备用颜色。查看zybocodes

于 2010-04-21T16:02:28.787 回答