JTable

Alguém tem algum exemplo de JTable dinânico conforme for percorrendo a matriz vai preenchendo a JTable…? achei exemplo mas somente de tabelas estaticas prescisado para tabelas dinâmicas.
fiz esse exemplo mas não deu certo:

import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;


 

public class Testes 
{

	public static void main(String args[]) 
	{
		int vet[]=new int[5];
		int i,j;
		DefaultTableModel modelo = new 
	       DefaultTableModel();
		
		JTable tabela = new JTable(modelo);
		
		
		for(i=0;i<vet.length;i++)
		{
			vet[i]=i;
		}
		modelo.addColumn(i);
		
		JOptionPane.showMessageDialog(null,tabela);
	}
	
	   
	
		 
}

Um jeito não tão elegante (e não escalável) é remontar o modelo toda vez que você adiciona uma linha ou coluna, e ir dando refresh na JTable.

Se a ordem da sua matriz não for tão grande, não haverá tanto problema quanto ao desempenho.

ou…acho q tem um exeplo disso aqui no forum…nos tutorias

mas vai um exemplo …

private void criatabela(){

DefaultTableModel modelo;
String coluna[];
try{

//cria as colunas
coluna = new String [4];
coluna[0]=“Sintatico”;
coluna[1]=“Token”;
coluna[2]=“Linha”;
coluna[3]=“Atributo”;

   modelo = new DefaultTableModel(coluna,0);

   String dados[]=new String [4];
   JListaErroSintatico aux=erro;

//vai colocando as colunas…
while (aux!=null){
dados[0]=aux.getNome();
dados[1]=aux.getTipo();
dados[2]=aux.getLinha().toString();
dados[3]="----------------------";

       aux=aux.getProx();
       modelo.addRow(dados);
   }
   Tabela.setModel(modelo);
}
catch (Exception e){}

}

é isso q vc t querendo ?

PRESCISO DE JTABLE DINÂMICA…
estática eu sei fazer eu presico de uma que peencha conforme for aparecendo elemento em uma matriz esses exemplos que vcs estão falando são de JTable estática eu presciso de um método que pegue todos os elementos da matriz e jogo linha colunas em um JTable, para implementar esse método:

public String imprimePares()
	{
		String saida="";
		int i,j;
		saida+="E = {";
		for(i=0;i<matAdj.length;i++)
		{
			 
			for(j=0;j<matAdj.length;j++)
			{
				if(matAdj[i][j]!=0)
				{
					saida+="("+i+","+j+")";
				}
			}
			
		}
		saida+="}";
		return saida;
		
	}

em vez de colocar um uma string eu presciso colocar em uma JTable

Monte o seu próprio table model.

Sempre que alterar um valor da matriz, lance um fireTableDataChanged, que alterará também o valor na tabela.

Você pode fazer um método no model, que altera uma linha/coluna e já lança o evento.

PS: O verbo precisar não tem s antes do c.

Ok, aqui está um TableModel para matrizes bem simples, que fiz para te demonstrar como funciona.

Está bem comentadinho. Acostume-se a, quando usar tabelas, implementar o seu próprio model. Facilita muito a sua vida e deixa o código bem mais claro.

Cara muito obrigado pelos exemplos, meu problema e o seguinte tenho que jogar dentro de uma JTable a matriz de adjacência de um determinado grafo e ela e matriz [v]*[v] que dizer vértice por vértice um exemplo

	bh	sp	rj	vit
bh	0	580	450	520
sp	580	0	300	700
rj	450	300	0	360
vit	520	720	360	0

bh sp rj vit são os pesos das arestas isto é soh um exemplo tenho que fazer um table que seja [v][v] e não posso criar uma inner classe por exemplo se não aprapalho minha classe grafo já vi vários exemplos mas ainda não vi um exemplo fácil de add na JTable em tempo de execução nas minhas pesquisas encontrei a seguinte forma:

 DefaultTableModel modelo = new 
       DefaultTableModel();
    
    // constrói a tabela
    JTable tabela = new JTable(modelo);
    
    // Cria duas colunas
    modelo.addColumn("Nome");
    modelo.addColumn("Idade");

isso que eu presiso de add em tempo de execução e também minha classe so trabalha com int e parece dar erro colocar int como parâmetro mas isso não e problema depois eu do um jeito, eu presciso mostra ela no
JOptionPane.showMessageDialog(null,tabela);//setar a tabela aki;
tipo usando um JTextArea
exemplo:

import javax.swing.JTextArea;
import javax.swing.JOptionPane;


public class Testes  
{
	 
	public static void main(String args[]) 
	{
	    StringBuffer add = new StringBuffer();
	    JTextArea texto = new JTextArea(5,5);
	    
	    add.append("Essa é a string que vou setar no TextArea\n");
	    add.append("Esse é o texto final");
	    
	    texto.setText(add.toString());
	    
	    JOptionPane.showMessageDialog(null,texto);
		
 
		
	}
	 	 
		 
}

tipo que criei um TextArea e setei ele no JOptionPane e exatamente isso que quero fazer com o JTable jeito tenho quase certeza que tem,mas tem que ser add de forma dinâmica muitos dos exemplos que eu vejo e tipo este:


public class Testes2 {
	
	public static void main(String args[])
	{
		  String[][] dados = new String [][]{
				                {"SP","Sao Paulo"},
				                {"RJ","Rio de Janeiro"},
				                {"RN","Rio Grande do Norte"},
				                {"PR","Parana"}
				  };
				 String[] colunas = new String []{"Estado","Cidade"};
				  // Ao inves de passar direto, colocamos os dados em um modelo
				  DefaultTableModel modelo = new DefaultTableModel(dados, colunas);
				  // e passamos o modelo para criar a jtable
				  JTable jtable = new JTable( modelo );
				  
				  JOptionPane.showMessageDialog(null,jtable);
	}

}

esse pelomenos tem uma coisa que eu presciso ele seta a tabela no JOptionPane o problema que ela é estática e eu presciso de uma dinâmica e que de para colocar dentro de um método void e quando eu chamar ele ele me retorna a matriz de adjancência impressa no JTable meu método imprime e esse:


	public void imprimeMatAdj()
	{
		 
		int i,j;
		 
		for(i=0;i<matAdj.length;i++)
		{
			 
			for(j=0;j<matAdj.length;j++)
			{
				 / /Aqui tenho que colocar o JTable

                               //tipo um método  tabela.addColumn(i);
                               //tipo um método  tabela.addRows(j);

			}
			
		}
		 
                JOptionPane.showMessageDialog(null,AQUI TENHO QUE SETAR E MOSTAR A TABELA);

		
	}

Cara você que tem mais conhecimento do que eu será que tem jeito…? porque se não tiver vou deixar a JTable de lado.

Que tem jeito, tem.

Estude mais sobre o TableModel, como eu te falei. Você vai ver que por lá tem método para adicionar, mudar a estrutura da tabela, etc.

Agora, concentre-se em suas classes. A tabela deve se preocupar apenas em exibir os resultados.

Amigo, não sei se entendi direito o que vc precisa, mas enfim, eu precisei recentemente criar colunas dinamicamente no meu JTable. No meu caso sempre só haverá uma linha, então não tive problemas, mas veja como faço de forma simples a adição de colunas:

Object[] obj = {"texto da minha linha"};
((DefaultTableModel)meuJTable.getModel()).addColumn(null,obj);

Esse código acima eu faço cada vez que o usuário manda inserir uma coluna na minha JTable de uma linha.

Ah, e quando eu inicializo meu JTable, no Post-init-Code, eu faço algo assim:

DefaultTableModel dtm = new DefaultTableModel();
dtm.addRow(new Object[1]); // sempre só haverá uma linha
meuJTable.setModel(dtm);

Não se esqueça de setar o atributo “autoCreateColumns” do seu JTable, desta forma sempre que vc criar uma columa no model do JTable ele automaticamente criará no JTable.

Espero ter ajudado! :wink:

[]'s