Dúvida JTable

4 respostas
F
opa, tudo bem? to com um problema usando o jtable, ja dei uma olhada nos tutoriais q tem aqui no guj, mas to com um problema. Eis o código
import java.awt.*;
import javax.swing.*;

public class Item extends JFrame{

	 Item(){
		setTitle("Relatório de itens");
		setBounds(500,200,300,300);
		String []linhas = new String[]{"","","",""};
		String [] coluna = new  String []{"Código", "Descrição","Quantidade","Preço"};
		JTable jt1 = new JTable(linhas, coluna);
		setVisible(true);
		getContentPane().add(jt1);
		
		
	}
	 
	 public static void main(String args[]){
		 JFrame janela = new Item();
	 }
}

Estou usando o eclipse. Na linha q eu instancio a JTable (11), aparece o sublinhado vermelho. Por que isso acontece?
Grato

4 Respostas

franciscossouza

Fica complicado ajudar simplesmente assim, passa o que o Eclipse está falando pra você (:

Posso lhe adiantar que a variável “linhas” deve ser um vetor de vetor (matriz - String [][]).

ViniGodoy

Olha, fica difícil usar o JTable se você usar o DefaultTableModel. Seu código vai ficar confuso, vai misturar lógica de negócio com lógica de tela e vai ocupar mais de duas vezes mais memória que o necessário. É melhor que você implemente um TableModel próprio. Dê uma olhada nesse tópico:
http://www.guj.com.br/posts/list/132698.java#714736

F
opa gente, foi mal hehehe refiz a linha da parte do vetor linhas [l 9]. O main dentro dessa classe é só pra testar, no projeto definitivo ele estará em outra classe. eis o novo código
import java.awt.*;
import javax.swing.*;

public class Item extends JFrame{

	 Item(){
		setTitle("Relatório de itens");
		setBounds(500,200,300,300);
		String [][]linhas = new String[][] {"",""},{"",""},{"",""},{"",""};
		String [] coluna = new  String []{"Código", "Descrição","Quantidade","Preço"};
		JTable jt1 = new JTable(linhas, coluna);
		setVisible(true);
		getContentPane().add(jt1);
		
		
	}
	 
	 public static void main(String args[]){
		 JFrame janela = new Item();
	 }
}

Eis o q aparece no console de erros

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Type mismatch: cannot convert from String to String[]
Type mismatch: cannot convert from String to String[]
Syntax error on token "}", delete this token
Syntax error, insert "}" to complete ArrayInitializer

at Item.(Item.java:9)
at Item.main(Item.java:19)

ViniGodoy
desculpe, mas é q eu sou novato nessa parte gráfica e ainda nao entendo mto. O q vc quis dizer com misturar logica de negócio e lógica de tela?

ViniGodoy

Sua tabela provavelmente está exibindo um List de algum tipo de objeto. Pelo menos, deveria estar. No seu caso, parece um list de objetos da classe Produto.

Pois bem, usando DefaultTableModel, você não tem um JTable de produtos, e sim um JTable de Vector<Vector><Object>>. Isso te forcará a copiar os dados da lista de produtos para o defaultTableModel, e vice-versa. Toda essa cópia acaba sendo na própria classe de visão, ou seja, no seu JFrame. Isso viola totalmente as boas práticas de programação.

O ideal, então, é você criar um filho de AbstractTableModel, que trabalhe diretamente com essa lista. Todas as modificações na tabela serão notificadas para esse model, e todas as modificações do model serão notificadas para a tabela, através do mecanismo de eventos do Java.

Tudo soa muito complicado, mas se você ler o tablemodel de exemplo no link que postei ali em cima, vai ver que no fundo é muito simples. Aliás, muito mais simples do que usar o DefaultTableModel. Não só vector[][] de objects não são criados, como não se faz casts, e não se duplica informações no sistema.

Criado 25 de outubro de 2009
Ultima resposta 26 de out. de 2009
Respostas 4
Participantes 3