【问题标题】:How to set the colour of my 1st row in my JTable to yellow(or any colour)?如何将我的 JTable 中第一行的颜色设置为黄色(或任何颜色)?
【发布时间】:2010-11-06 15:52:09
【问题描述】:

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

下面的代码是为列做的:

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

col.setCellRenderer(new MyTableCellRenderer());

请问如何连续做?

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

谢谢

【问题讨论】:

  • 您使用的是什么平台和语言?
  • 对不起......是的,它是 java swing

标签: java swing background-color


【解决方案1】:

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

 public Component getTableCellRendererComponent(JTable table,
                                    Object value,
                                    boolean isSelected,
                                    boolean hasFocus,
                                    int row,
                                    int column) {
     if (row == 0) {
         setBackground(myBGColor)
     }
     ....

【讨论】:

    【解决方案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);
        }
    };
    

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

    【讨论】:

      【解决方案3】:

      我通常通过实现包装另一个 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;
          }
      }
      

      【讨论】:

        【解决方案4】:

        为了更简单地设置行颜色,您可以使用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

        希望对你有帮助

        【讨论】:

          【解决方案5】:

          您可以为 jtable 行设置替代颜色。查看zybocodes

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-04-02
            • 1970-01-01
            • 2012-03-21
            • 1970-01-01
            • 1970-01-01
            • 2019-05-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多