Win a copy of Murach's Python Programming this week in the Jython/Python forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

JTable Not Able to Render Rows in Different Colors  RSS feed

 
Faisal Aduri
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi all ,

I have a jtable , a customtablemodel and a customcellrenderer with the NetBeans IDE.
I want to have different colors for different rows. But anytime I run the application ,
the rows are not painted as expected.
The code snippets are provided below.

This code is from the 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);


this code is from the 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;
}
}


This is from the Table Model.


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.");
}
}


Any suggestion to get the desired result.
 
Rob Camick
Ranch Hand
Posts: 2752
11
  • Likes 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Use the "Code" formatting tags when posting code.

Post a proper SSCCE when posting code.

Don't crosspost: http://stackoverflow.com/questions/25475515/jtable-rows-not-rendered-in-expected-colors
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!