Java 未以预期颜色呈现JTable行

Java 未以预期颜色呈现JTable行,java,swing,netbeans,jtable,tablecellrenderer,Java,Swing,Netbeans,Jtable,Tablecellrenderer,我有一个jtable、一个customtablemodel和一个带有NetBeans IDE的customcellrenderer。 我想要不同的行有不同的颜色。但只要我运行应用程序, 行未按预期绘制。 下面提供了代码片段 此代码来自jtable: duesTable = new javax.swing.JTable(); duesTable.setModel(duestableModel); TableColumn tcol = duesTable.getColumnModel(

我有一个jtable、一个customtablemodel和一个带有NetBeans IDE的customcellrenderer。 我想要不同的行有不同的颜色。但只要我运行应用程序, 行未按预期绘制。 下面提供了代码片段

此代码来自jtable:

  duesTable = new javax.swing.JTable();

  duesTable.setModel(duestableModel);
  TableColumn tcol = duesTable.getColumnModel().getColumn(2);
  tcol.setCellRenderer(new CustomTableCellRenderer2());
  duesTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
此代码来自TableCellRenderer

  public class CustomTableCellRenderer2 extends DefaultTableCellRenderer{

 @Override
 public Component getTableCellRendererComponent (JTable table, 
 Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(
table, obj, isSelected, hasFocus, row, column);

if (isSelected) {
cell.setBackground(Color.green);
} 
else {
if (row % 2 == 0) {
cell.setBackground(Color.green);
}
else {
cell.setBackground(Color.lightGray);
  }
}
return cell;
  }
 }
这是从表模型中提取的

        public class DuesTableModel extends AbstractTableModel implements TableModelListener  {

       private List<List<Object>> dataList = new ArrayList<>();
       private String[] header = { "ID"," PAYMENT YEAR" , "AMOUNT"};  // Payment year is a date
      datatype

       private int minRowCount = 5;    

      public DuesTableModel()
     { super(); }

      public List<List<Object>> getDataList() { 
    return dataList;
       }

     public void setDataList(List<List<Object>> dataList) {  
      this.dataList = dataList;
      fireTableDataChanged();       
      fireTableStructureChanged();        
      }


       @Override
        public int getRowCount() {
       return Math.max(minRowCount, dataList.size());
        }

        @Override
        public int getColumnCount() {
         return header.length;
        }

        public void setHeader(String[] header) {
       this.header = header;
        }

       public String[] getHeader() {
        return header;
       }

      @Override
     public void setValueAt(Object value, int row, int col)
      {       
       int x = 0;
      for(List<Object> l : dataList)
      {
      if(x == row)
       {  l.set(col, value);}
      x++;        
      }
     fireTableCellUpdated(row,col);    
     }


     @Override
      public Object getValueAt(int rowIndex, int columnIndex) {

        Object value = null;
       if(rowIndex < dataList.size())      
       {value = dataList.get(rowIndex).get(columnIndex);}
      return value;
       }

      @Override
      public String getColumnName(int col) {
      return header[col];
     }


    @Override
     public Class<?> getColumnClass(int column)
      {        
        switch (column) {
        case 0:
            return Integer.class;
        case 1:
            return Date.class;
        case 2:
            return Double.class;
        default:
            return String.class;
    }          
    }

    @Override
    public boolean isCellEditable(int row, int col) {          
    return true; //col != 1;
    }


   @Override
   public void tableChanged(TableModelEvent e) {
    throw new UnsupportedOperationException("Not supported yet."); 
  }    
  }

获得所需结果的任何建议。

发表您的文章,说明问题所在。对于您的SSCE,只需使用DefaultTableModel,因为TableModel与问题无关。交叉发布:讨厌思考用户应该如何区分选中行和未选中行,但是,您是否确保单元格渲染是不透明的。。。?