Qual componente do SWING é o mais indicado²?

6 respostas
diego_perez

galera to pretendendo fazer uma tela mais o menos igual a essa, ai preciso da ajuda de voces nessa questao
q eu nao sei qual componente usar do SWING pra fazer essa parte do meio onde aparece o produto ( CODIGO, DESCRIÇAO , QTDE, VALOR …) eu pensei numa JTABLE onde eu digitaria o codigo numa coluna e apareceria nas outras colunas no caso a descricao e o valor
Se alguem concorda em fazer essa parte com uma JTABLE me ajudem no q eu devo me focar agora pra fazer essa consulta
so iniciante procurando um caminho … valeuu

6 Respostas

Daniel_Girotto

Com toda certeza um JTable. Precisei implementar uma tabela essa semana e estes links me ajudaram muito:
http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JTable.html
http://download.oracle.com/javase/tutorial/uiswing/components/table.html

e para fazer o meu TableModel, 3 links foram muitos esclarecedores:




.
e para fazer a consulta, acredito que terás que trabalhar com o ouvinte de eventos “SelectionListener”

Aqui no fórum tem muito material bom sobre JTable.

Espero que ajude!

carlos.e.a

Voce pode usar Jtable como o Daniel disse. Pra fazer a consulta primeiro voce vai ter que nos dizer qual a forma de persistencia dos dados? File, BD convencional, etc… Independente de qual seja, voce vai basicamente ter que implementar um CRUD que receba por exemplo um produto e retorne as outras informacoes, vai depender da sua necessidade. Entao a sua tabela vai receber esses dados e coloca-los na tela. Os passos mais ou menos sao esses. Outra duvida mais especifica da um grito aew que a gente ajuda.

diego_perez

Alguem tem um exemplo de JTABLE q q faz consulta no banco apartir de um valor???

tipo
digito o codigo na propria jtable e ele me retorna as outras colunas

diego_perez

Galera eu consegui fazer uma Jtable q me retorna-se tudo do banco
mais meu proposito nao e esse

queria quando eu digitasse o codigo do produto ela me retorna-se as informaçoes do proprio na Jtable

Vejam o codigo:
package Visual;


import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
import java.util.*;
import java.awt.Dimension;
import javax.swing.JButton;
import java.awt.BorderLayout;
import DAO.CadastroDAO;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Rectangle;
import javax.swing.BorderFactory;

public class Estoque extends JFrame{
	
private Connection con;
static JTable tabela;

public Estoque(){
	super("Estoque:" );
		
	String url = "jdbc:mysql://localhost:3307/sistemacomercial";
	String usuario = "root";
	String senha = "123456";
	try{
	Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
	con = DriverManager.getConnection(url, usuario, senha);
	}
	catch (Exception e){
	JOptionPane.showMessageDialog(null,"Conexão não estabelecida","Mensagem do Programa",
	JOptionPane.ERROR_MESSAGE);
	}
	
	buscaTabela();
	
	setSize(900,400);
	setVisible(true);
	

	}

static JButton opcao = new JButton("Opções");
static ActionListener Action = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    
		try {
		Opcao o = new Opcao();
		o.getJFrame().setVisible(true);
			
		} catch (Exception e1) {
			
			e1.printStackTrace();
		}
    
    }
    };

 	public static void main(String args[]){
		Estoque app = new Estoque();
	app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
	}
	
	private void buscaTabela(){
	Statement st;
	ResultSet res;
	opcao.addActionListener(Action);
   add(opcao, BorderLayout.SOUTH );
   
	try{

	Vector cabecalho = new Vector();
	Vector linhas = new Vector();
	st = con.createStatement();
	res = st.executeQuery("SELECT * FROM cadastroproduto ORDER BY data DESC");
	res.next();
	ResultSetMetaData rsmd = res.getMetaData();
	for (int i = 1; i <= rsmd.getColumnCount(); ++i)
	cabecalho.addElement(rsmd.getColumnName(i));
	do{
	linhas.addElement(proximaLinha(res,rsmd));
	}
	while (res.next());
	tabela = new JTable(linhas,cabecalho);
	tabela.setSize(new Dimension(494, 184));
	tabela.getColumnModel();
	JScrollPane scroller = new JScrollPane( tabela );
	scroller.setSize(new Dimension(703, 276));
	
	getContentPane().add(scroller, BorderLayout.CENTER);

	validate();
	st.close();

	    
	}
	catch (SQLException sqlex){
	}
	}
	private Vector proximaLinha(ResultSet rs, ResultSetMetaData rsmd){
	Vector LinhaAtual = new Vector();
	try{
	for (int i = 1; i <= rsmd.getColumnCount(); ++i)
	switch(rsmd.getColumnType(i)){
	case Types.VARCHAR: LinhaAtual.addElement(rs.getString(i));
	break;
	case Types.TIMESTAMP: LinhaAtual.addElement(rs.getDate(i));
	break;
	case Types.DOUBLE: LinhaAtual.addElement(new Double(rs.getDouble(i)));
	break;
	}
	}
	catch(SQLException e){
	}
	return LinhaAtual;
	}
	}  //  @jve:decl-index=0:visual-constraint="10,10"
cardosao

Vou acompanhar seu posto pq da forma que voce falou, seria bem interessante, se eu encontrar algo na internet eu post aqui tbm.

abraços

carlos.e.a

Amigo faça um CRUD para a sua tabela de produtos. Nao faça macarronada de codigo misturando regras de negocio, apresentacao e modelo. Voce vai ter muita dor de cabeça depois com isso. Leia sobre padroes de projeto. Isso que voce esta tentando fazer é perfeitamente possivel e facil de fazer se voce construir um CRUD para o seu banco das tabelas que voce vai precisar.

Eu vou só dar a ideia pra voce. Vou supor que nessa sua tabela tem as colunas produto, descricao e codigo. Voce entao deve fazer um CRUD que recebe um objeto DTO - que contem apenas os atributos da sua tabela - e faz o where de acordo com os parametros inicializados desse objeto e retorna um ArrayList tambem de objetos DTO. Ou seja, se voce inicializa somente o produto e faz um Delete por exemplo, o seu Modelo vai lah no banco e faz a consulta: Delete from cadastroprodutos where produto = objetoDTO.getProduto. Tudo isso de forma transparente. Ou seja, depois de implementado o seu modelo voce pode fazer qualquer tipo de consulta no seu banco de forma inteiramente transparente, apenas inicializando os dados de um DTO e passando para o CRUD.

Se voce nao entendeu o que eu disse, sugiro dar uma lida sobre padroes de projeto/MVC e depois disso reler o que eu disse. Eu repito, se voce fizer macarronada de codigo vai ter muita dor de cabeça depois, alem de que acho bem dificil voce resolver o seu problema sem implementar um modelo pro seu banco.

A primeira vista pode parecer complicado mas depois que voce tiver familiarizado com isso em 20 min voce cria um modelo pra uma tabela simples que nem essa.

Criado 11 de março de 2011
Ultima resposta 12 de mar. de 2011
Respostas 6
Participantes 4