JTable

9 respostas
I

Olá… estou tentando fazer um JTable acessar uma collection que me retorna um objeto.

Na hora de recuperar os dados com o array, não estou conseguindo, uma vez que recupero eles assim: objeto.getAtributo().

Alguém faz idéia de como devo fazer o loop com a variavel String data[][] para pegar esses atributos e jogar nas colunas.
São 8 colunas.

9 Respostas

cv1

Hmm, e de onde vem a String[][] data?

I

Eu crio ela para poder pegar os dados da collection e jogar nela.
Estou usando um exemplo simples de JTable, aquele do tipo

esse data é aonde devo armazenar os dados não é?
as colunas estou entrando com elas manualmente mesmo, columnNames[0] = “blablabla” e etc…

Mas o data eu não consigo fazer um loop pra mostrar os dados vindo do objeto da collection.

cv1

Entao isso eh sinal de que vc esta usando o construtor errado da JTable :wink:

Da uma olhada no JTable(TableModel model), e na implementacao do DefaultTableModel. Vao ajudar um bocado :smiley:

I

Meu código é esse aqui:

import java.awt.*; 
import javax.swing.*;
import java.util.*;

class MeuModelo extends JFrame {

// Instance attributes used in this example 
private JPanel      topPanel; 
private JTable      table; 
private JScrollPane scrollPane; 

private String      columnNames[]; 
private String  	 data[][];
private Collection  listar;

// Constructor of main frame 
	public MeuModelo() {
		Object dataValues = null; 
	                // Set the frame characteristics 
	                setTitle( "TESTE" ); 
	                setSize( 300, 200 ); 
	                setBackground( Color.gray ); 

	                // Create a panel to hold all other components 
	                topPanel = new JPanel(); 
	                topPanel.setLayout( new BorderLayout() ); 
	                getContentPane().add( topPanel );

	                 // Create columns 
	                CreateColumns(); 
	                CreateData(); 

	                // Create a new table instance 
	                table = new JTable( data, columnNames ); 
 
	                // Configure some of JTable's paramters 
	                table.setShowHorizontalLines( false ); 
	                table.setRowSelectionAllowed( true ); 
	                table.setColumnSelectionAllowed( true );
	
	                // Change the selection colour 
	                table.setSelectionForeground( Color.white ); 
	                table.setSelectionBackground( Color.red ); 

	                // Add the table to a scrolling pane 
	                scrollPane = JTable.createScrollPaneForTable( table ); 
	                topPanel.add( scrollPane, BorderLayout.CENTER ); 
} 

	public void CreateColumns() { 
	               // Create column string labels 
	
	               columnNames = new String[8];
	               columnNames[0] = "coluna1";
	               columnNames[1] = "coluna2";
	               columnNames[2] = "coluna3";
	               columnNames[3] = "coluna4";
	               columnNames[4] = "coluna5";
	               columnNames[5] = "coluna6";
	               columnNames[6] = "coluna7";
	               columnNames[7] = "coluna8"; 
} 

	public void CreateData() { 
	               // Create data for each element 
	try{
	               // aqui como faço o loop???
		

		
	}
	 catch (Exception e){
		e.printStackTrace(); 
	}
} 
 

// Main entry point for this example 

public static void main( String args[] ) { 
	// Create an instance of the test application 
	
	MeuModelo mainFrame  = new MeuModelo(); 
	mainFrame.setVisible( true );
}
}
cv1

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Mais especificamente:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#data

I

http://java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/TableDemo.java

private Object[][] data = { {"Mary", "Campione", "Snowboarding", new Integer(5), new Boolean(false)}, {"Alison", "Huml", "Rowing", new Integer(3), new Boolean(true)}, {"Kathy", "Walrath", "Knitting", new Integer(2), new Boolean(false)}, {"Sharon", "Zakhour", "Speed reading", new Integer(20), new Boolean(true)}, {"Philip", "Milne", "Pool", new Integer(10), new Boolean(false)} };

Pegando esta parte do código do TableDemo.java
Suponha que eu tenho uma collection que me retorna um objeto.
Após pegar o objeto da collection e jogar numa variavel teste eu tenho que fazer um loop para pegar a informações da seguinte maneira: teste.getNome(), teste.getTelefone().
para isso, usaria um iterator.
O que não consigo fazer, é criar um loop decente que funcione para implementar o object[][] data como está no trecho do código. Entendeu?

cv1

Sim, Igor, eu entendi isso ha umas 6 mensagens atras. Mas acho que vc ainda nao pegou que, pra esse tipo de uso, fica horroroso meter tudo num DefaultTableModel (que eh o TableModel usado quando vc passa Object[][] pra JTable).

I

Então qual a melhor forma de fazer isso?

cv1

Implemente o seu proprio TableModel, que sabe usar a sua collection, assim como os getters dos seus beans :wink:

PS: nao implemente TableModel exatamente. Fica mais facil se vc extender AbstractTableModel. :wink:

Criado 2 de janeiro de 2004
Ultima resposta 2 de jan. de 2004
Respostas 9
Participantes 2