Problema ao criar um array de Classes

4 respostas
X

Então, sou novato em Java, e estou com um problema.

Assim... ProductTableModel é uma classe de uma biblioteca Jide. O que acontece é que no exemplo deles eles populam a variavel columnClasses da seguinte maneira:
Class[] columnClasses = {Integer.class,String.class,
                                     Integer.class,String.class,
                                     Integer.class,String.class,
                                     Integer.class,String.class};
O que eu estou criando é uma classe que permita a adição uma a uma dessas classes neste array de classes. A primeira coisa que tentei foi algo como
Class[] columnClasses;
columnClasses[i] = Integer.class;
Que não funcionou. Gerava erro de NullpointerException. Por ultimo tentei isso: (Deletei uns pedaços do código pra ficar mais objetivo..)
public class GridGenerica {
	Vector<Class> columnClassesVector;
	Vector<Vector<Object>> columnValues;
	Vector<Integer>	colunasAgrupadas;
	int i, c;
	private TableModel _model;
	private DefaultGroupTableModel _modelGroup;
	

	public GridGenerica(){		
		columnNames = new Vector<String>();
                                columnValues = new Vector<Vector<Object>>();
                                columnClassesVector = new Vector<Class>();
                                colunasAgrupadas = new Vector<Integer>();
                                c = 0;
                                i = 0;

	}
		
	public void criarColuna(String nome,Class tipo,int banda){		
		columnNames.add(nome);
		columnClassesVector.add(tipo);
		c++;
	}
	public void montarGrid(){
		Class[] columnClasses = (Class[])columnClassesVector.toArray();// Aqui está o problema
		_model = new ProductTableModel(columnValues, columnNames, columnClasses);
		_modelGroup = new DefaultGroupTableModel(_model);
		for( int j = 0; j<i;j++){
			_modelGroup.addGroupColumn(colunasAgrupadas.elementAt(i));
		}
		_modelGroup.groupAndRefresh();
		_table = new TreeTable(_modelGroup);
		_table.setExpandAllAllowed(false);
		_table.setRowHeight(18);
		_table.setShowTreeLines(true);
		_table.setShowGrid(false);
		_table.setIntercellSpacing(new Dimension(0, 0));
	}
}

Então, o que eu preciso não é nada complexo, eu acho. É só popular uma variável do tipo Class[] com várias classes. Alguém sabe como?

p.s.: Deve ser algo muito ridiculo que eu não fiz, pois também não consegui popular uma variável do tipo int[].

4 Respostas

brunoccouto
O que eu estou criando é uma classe que permita a adição uma a uma dessas classes neste array de classes. A primeira coisa que tentei foi algo como
1. Class[] columnClasses;  
2. columnClasses[i] = Integer.class;

O NullPointerException é lançado porque a sua variável columnClasses não tem referência pra Objeto algum..
O certo nesse caso seria:

// Desse forma você cria um array de Class com 10 posições 
Class[] columnClasses = new Class[10];

//Agora é só atribuir para cada posição do array um Objeto to tipo Class
columnClasses[0] = Integer.class;
columnClasses[1] = String.class;
columnClasses[2] = Boolean.class;
...

Recomedo que leia essa apostila
[url]http://www.caelum.com.br/downloads/apostila/caelum-java-objetos-fj11.pdf[/url]

Sami_Koivu

Olá,

Class[] columnClasses = (Class[])columnClassesVector.toArray();// Aqui está o problema

Não funciona, porque não dá pra fazer um cast de array to objeto (tipo de retorno do método toArray) para array de Class.

Há uma outra versão do método toArray que permite você especificar o tipo de array que você quer:

Class[] columnClasses = (Class[])columnClassesVector.toArray(new Class[columnClassesVector.size()]);
X
brunoccouto:
O que eu estou criando é uma classe que permita a adição uma a uma dessas classes neste array de classes. A primeira coisa que tentei foi algo como
1. Class[] columnClasses;  
2. columnClasses[i] = Integer.class;

O NullPointerException é lançado porque a sua variável columnClasses não tem referência pra Objeto algum..
O certo nesse caso seria:

// Desse forma você cria um array de Class com 10 posições 
Class[] columnClasses = new Class[10];

//Agora é só atribuir para cada posição do array um Objeto to tipo Class
columnClasses[0] = Integer.class;
columnClasses[1] = String.class;
columnClasses[2] = Boolean.class;
...

Recomedo que leia essa apostila
[url]http://www.caelum.com.br/downloads/apostila/caelum-java-objetos-fj11.pdf[/url]

Era isso mesmo ^^

Valeu mesmo!

Vou aceitar a dica da apostila.

Marky.Vasconcelos

Mas também é interessante voce criar seu proprio ColumnModel… voce nao vai ter que criar essa array de Class voce pode usar aquele GridGenerico como base.

Criado 24 de fevereiro de 2009
Ultima resposta 25 de fev. de 2009
Respostas 4
Participantes 4