AbstractTAbleModel com Integer

12 respostas
L

Pessoal, eis um trecho do meu código:

private JScrollPane create(final Integer obj[][]) {
int i,j;

TableModel dataModel = new AbstractTableModel() {

public int getColumnCount() { return numc; }

public int getRowCount() { return numl;}

public Integer getValueAt(int row, int col) { return obj[row][col]; }

public boolean isCellEditable(int row, int col)

{ return true; }

public void setValueAt(Integer value, int row, int col) {

if (value instanceof Integer)

{

obj[row][col] = (Integer)value;

}

else

{

System.out.println(deu erro);

System.exit( 0 );
}
                    fireTableCellUpdated(row, col);
             }

      };


O que acontece é que se eu ponho um valor inteiro na célula, ele não aborta o programa, ou seja, value é uma instancia de Integer, porém não atribui o valor…

Alguém já tem experiência com tabelas com Integers? Eu pesquisei e me pareceu certo esse código. Qualquer ajuda é muito bem-vinda.

muito obrigado, Luiz Gustavo

12 Respostas

danieldestro

Tira aquele final da primeira linha, lá na declaração do método create().

L

Ok, mas quando eu faço isso, encontro erros na compilação:

local variable obj is accessed from within inner class; needs to be declared final
public Integer getValueAt(int row, int col) { return obj[row][col]; }

local variable obj is accessed from within inner class; needs to be declared final
obj[row][col] = (Integer)value;

danieldestro

Ops, é verdade…
Então, ao invés de criar uma classe interna (inner class), cria uma classe pública.

Sami_Koivu

Bom, acho que entendo a problema, agora a questão é se meu português basta pra explicar…

O interface TableModel tem o metodo seguinte:

public Object getValueAt(int rowIndex, int columnIndex)

E você está tentando mudar o tipo do objeto que o metodo retorna(do java.lang.Object para java.lang.Integer).

public Integer getValueAt(int row, int col) { return obj[row][col]; }

Assim não dá.

Seu metodo deve declarar que está retornando um Object mesmo que fosse na realidade um Integer(que na verdade tambem é um Object)

Se não dá pra entender talvez os Brasileiros poderiam explicar melhor.

-Sami

L

Olá

Sim, eu entendi sua resposta. Mas se quiser escrever em inglês, tudo bem.

O meu problema começou porque eu queria fazer cálculos com o obj[row][col], mas sendo do tipo OBJECT, eu precisava converter pra int ou Integer, e nao consegui.

Talvez a questão seja, como converter de Object pra int e depois fazer o caminho contrário…

Luiz Gustavo

keller
public Integer getValueAt(int row, int col) { return new Integer(obj[row][col]); }

*deve funcionar, ou boiei ?

danieldestro

gui:
public Integer getValueAt(int row, int col) { return new Integer(obj[row][col]); }

*deve funcionar, ou boiei ?

Não vai funcionar no caso do AbstractTableModel.

Para converter:

int i = ((Integer) getValueAt(0,0)).intValue();
Object o = new Integer(i);

L

É uma boa idéia, mas o construtor Integer nao funciona recebendo um Object…

LG

danieldestro

Mas se você reparar direito no meu código, o construtor de Integer recebe um int e não um Object.

keller

public Integer getValueAt(int row, int col) { int i = ((Integer) getValueAt(row,col)).intValue(); return new Integer(i); }

agora vai! :smiley:

keller

[edited]

L

Acho que respondemos ao mesmo tempo, ou eu nao tinha atualizado minha página, mas nao tinha visto seu código.

Seja como for, consegui realizar meu propósito.

Mantive obj como Object e o código AbstractTableModel como o mais “clássico” possível, trabalhando com objetos Object.

Quando eu preciso fazer o cálculo na tabela, eu faço assim:

Integer x;

int a, i, j;

x=new Integer(obj[i][j].toString());

a=x.intValue();

a+=113;

obj[i][j]=a;

E funcioneu bem.

Muito obrigado a todos!!!

Luiz Gustavo

Criado 12 de janeiro de 2005
Ultima resposta 12 de jan. de 2005
Respostas 12
Participantes 4