Problemas com DefaultTableCellRenderer e AbstractTableModel

0 respostas
R

Boas pessoal,

Estou a iniciar nisso de jtable e li alguns topicos sobre isso mas estou bloqueado nisso de pintar a minha jtable com o renderer. Segue aqui o meu codigo:

package Utils;

import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;

/**
 *
 */
public class CreateTableObjective extends AbstractTableModel {
    
    private final Object[][] data;
    private final String[] header;
    private final int columnEditable;
    private final ArrayList<Integer> colEdit = new ArrayList<>();

    /*
     * Constructor
     */
    public CreateTableObjective(Object[][] data, String[] header, int numColumnEditable) {
        super();
        this.data = data;
        this.header = header;
        this.columnEditable = numColumnEditable;
    }
    
    /*
     * Constructor
     */
    public CreateTableObjective(Object[][] data, String[] header, int[] numColumnEditable) {
        super();
        this.data = data;
        this.header = header;
        columnEditable = 1000;
        for(int i = 0;i<numColumnEditable.length;i++)
        {
            colEdit.add(numColumnEditable[i]);
        }
    }
    
    
    /*
     * Dá o numero de linha da tabela
     */
    @Override
    public int getRowCount() {
        return data.length;
    }

    /*
     * Numero de coluna da tabela
     */
    @Override
    public int getColumnCount() {
        return header.length;
    }

    /*
     * Nome das colunas
     */
    @Override
    public String getColumnName(int columnIndex) {
        return header[columnIndex];
    }

    /*
     * Devolve o valor da celula
     */
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return data[rowIndex][columnIndex];
    }
    
    /**
    * 
    */
    @Override
    public Class<?> getColumnClass(int col){
        switch (col) {
        case 0: 
            return Integer.class;
        case 1: 
            return String.class;
        default:
            return Double.class;
        }
    }
    
    /**
    * 
    * @return boolean
    * columnEditable = 1000 isso quer dizer que construi com um array de coluna editável
    */
    @Override
    public boolean isCellEditable(int row, int col){
        if(this.columnEditable == 1000)
        {
            if(colEdit.contains(col))
            {
                return true;
            }else{
                return false;
            }
        }else{
            if(col == this.columnEditable)
            {
                return true;
            }else{
                return false; 
            }
        }                
    }
    
    /*
     * Permite alterar o valor de uma celula
     */
    @Override
    public void setValueAt(Object value, int row, int col) {
        data[row][col] = value;
        fireTableCellUpdated(row, col);
    }
    
}
public class ObjectiveJtable extends DefaultTableCellRenderer{
    
    public Component getTableCellRendererComponent
                     (JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){
                
        Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        
        if (column == 0) {
            component.setBackground(Color.orange); 
        }
        if (column == 1)
        {
            component.setBackground(Color.white); 
        }
        if(column > 1)
        {
           component.setBackground(Color.black);
        }
        
//        setHorizontalAlignment(CENTER);
//        setHorizontalTextPosition(CENTER);
        return component;
    }
}

Se comento o método " public Class getColumnClass(int col)" da class "CreateTableObjective" pinta me correcto mas perde object.class que quero manter para não realizar verificação de se é string em vez de double.

Obrigado pela ajuda.

Criado 24 de agosto de 2012
Respostas 0
Participantes 1