Java 未以预期颜色呈现JTable行
我有一个jtable、一个customtablemodel和一个带有NetBeans IDE的customcellrenderer。 我想要不同的行有不同的颜色。但只要我运行应用程序, 行未按预期绘制。 下面提供了代码片段 此代码来自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(
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与问题无关。交叉发布:讨厌思考用户应该如何区分选中行和未选中行,但是,您是否确保单元格渲染是不透明的。。。?