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:
[code]
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);
}
}[/code]
[code]
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;
}
}[/code]
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.