JTable dá conta?

Olha a Tela abaixo:

Esse grid de dados ai eu fiz assim:

Ele é um JPanel dentro de um JScrollPane. Cada linha deste grid é uma classe que estende um JPanel e monta os componentes da linha.

Eu tenho um problema com foco e rolagem neste caso. Qndo o foco vai pra um componente escondido, ele não aparece automaticamente, e a rolagem é muito lerda.

Eu pensei então em usar um JTable.

Vocês crêem que eu possa fazer o mesmo tipo de grid?

Sendo que algumas colunas não serão editáveis, o botão da primeira coluna deve abrir um tela pra eu selecionar o produto, que vai preencher as colunas Produto e Descrição, e deverá haver uma opção para remover linhas ou adicionar novas.

O JTable dá conta ou fica MUITO dificil?

Abraços

Oops, tava faltando a imagem… agora sim!

ainda não! :smiley:

Cara, isso IMPLORA pra vc fazer uma JTable… hehehe

De uma lida nos tutoriais da JTable: http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Agora sim, sim! hehehehe

Então, ainda não tinha lido o How To sobre JTable. Só acho que vou apanhar um bocado.

kd a tela ???!!! :shock:
Eu tenho telas que uso JTables ( qdo pode aparecer somente uma linha ) ou faço mais ou menos isso Daniel: eu fixo o numero de registros na tela ( so mostro os campos visiveis ), depois tenho uma classe para trabalhar com o que deve ser mostrado. Isso vale qdo o numero de linhas de um registro é mais que 1. Mais ou menos assim

Codigo:
Nome

Codigo
Nome

Codigo
Nome

Mas a Jtable nao eh tao complicada assim nao. Uma vez feito tudo pra ela, fica facil mexer nela. :smiley:

Abraços!

Deve ser problema do GUJ, pois a imagem existe sim.

Êê guj… rsss :shock: :smiley: :twisted:

Pessoal,

Meu grid (JTable) tá rolando… o problema foi que não achei nada relativo a como fazer aquele botão (lado esquerdo do grid na imagem).

É o seguinte. O cara pode tanto digitar o cód. do produto direto ou então clicar em um botão que abre uma tela de pesquisa e joga o cód. selecionado para a celula.

Alguém sabe uma boa maneira de se fazer isso?

Cara, uma época rolava por ai um link com exemplos swing, e nesses existia muita coisa legal usando JTables, talvez ele te resolvam… Infelizmente eu não tenho mais o link, mas peguei aqui no guj…

Se tu não achar, eu posso te mandar um mail com os exemplos, que na época eu peguei os mesmos no site…

Fallow

Daniel, o trash de usar botão dentro da tabela é que vc tem que fazer tudo na mão…

Vc tem que criar um TableCellRenderer que pinte o botão, e um CellEditor que abra a janela. É chato, mas rola.

Tem um tutorial aqui no guj sobre renderers, não lembro se fala de editors. Além disso, tem o velho “How to Use Tables” da Sun que tem um capítulo sobre isso…

eu sei que eu já fiz isso, então vai com fé que dá!

[]s!!

Olá…

"Vc tem que criar um TableCellRenderer que pinte o botão, e um CellEditor que abra a janela. É chato, mas rola. " --> dukejeffrie

Realmente, o que você quer fazer é possível e também não é tão dificil assim… use o que dukejeffrie falou… como ele mesmo disse é meio chato.
Mas fiz várias aplicações com tabelas semelhantes a que você quer e fica bem legal…e também não fica tão pesado…

Se quiser um exemplo é só pedir…

Flw…

Pode, por favor, disponibilizar os exemplos?

Obrigado! :smiley:

Reforçando o pedido do DanielDestro,
pode postar/disponibilizar o código para uma olhada! 8)

Dá uma olhada no SwingSet Demo, uma aplicação de demonstração do JFC que está em JAVA_HOME/demo/jfc/swingset/

Dae…

Esse é um exemplo com JButton… mas vocês podem fazer com qualquer componente…

qualquer dúvida só fala…

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

public
class		MeuJTable
extends		JTable
{	
	private			JButton
	button		=	new	JButton("...");
	
	/*
	Crie os construtores que achar necessário...
	Esse construtor é só um exemplo para mostrar com chamar o botão...
	*/
	
	public
	MeuJTable()
	{
		super(new Vector(),new Vector());
		getColumn("nome da coluna").setCellRenderer(new ButtonCellRenderer());		
		getColumn("nome da coluna").setCellEditor(new ButtonCellEditor());
	}
	
	class			ButtonCellRenderer
	extends			DefaultTableCellRenderer
	{		
		public
		Component		getTableCellRendererComponent(	JTable			table,
									Object			value,
									boolean			isSelected,
									boolean			hasFocus,
									int			row,
									int			column
									)
		{									
			return 	button;			
		}
	}
	class			ButtonCellEditor
	implements		TableCellEditor
	{
		
		public
		Component		getTableCellEditorComponent(	JTable			table,
									Object			value,
									boolean			isSelected,
									int			row,
									int			column
									)
		{							
			return 	button;	
		}
		public Object getCellEditorValue()
		{
			return	button;
		}
		public boolean isCellEditable(EventObject anEvent)
		{			      
			return true;
		}
		public boolean shouldSelectCell(EventObject anEvent)
		{
			return false;
		}
		public boolean stopCellEditing()
		{
			return true;
		}
		public void cancelCellEditing()
		{
		} 
		public void addCellEditorListener(CellEditorListener l)
		{
		} 
		public void removeCellEditorListener(CellEditorListener l)
		{
		}
	}
}

Pô, tem uns renderers no tutorial do GUJ!! : )

[]s

.

Hehehehe, tanta gente extendendo TableModels e você refez uma tabela cheia de JPanels hehehehe, achei legal, valeu a prática.

Considerando que foi há 2 anos atrás e foi minha primeira experiência com Swing.
Eu só não tinha noção de como (se podia) fazer uma tabela que tivesse um campo com preenchimento e um botão para busca. Implementando um renderer dá certo.