Gravar dados de uma tabela

34 respostas
D

ola pessoal usei esse código como evento em um botao pra gravar dados da jtable
ele fala que gravou mais no banco de dados nao aparece nada alguém pode me ajudar brigadaoo eu uso hibernate!!
e postgree segue o código ai abaixo

botao2.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {  
                JTable tabela = new JTable(modelo);  
                     int linha = modelo.getRowCount();   
                     int col = modelo.getColumnCount();   
                    String sql ="INSERT into Venda (id_venda,descricao,qtde,valor,total) values ('"+   
                    caixa5.getText()+"','"+  
                    caixa6.getText()+"','"+  
                    caixa7.getText()+"','"+  
                    caixa8.getText()+"','"+  
                    caixa9.getText()+"','"+  
                                modelo.getValueAt(0,0)+"','"+   
                                modelo.getValueAt(0,1)+"','"+   
                                modelo.getValueAt(0,2)+"','"+   
                                modelo.getValueAt(0,3)+"','"+   
                                modelo.getValueAt( 0,4)+"')";  
  
                JOptionPane.showMessageDialog(null,"Gravação realizada com sucesso");  
  
                }  
            });

34 Respostas

A

Em que parte do código você executou a inserção no banco? Você só tá colocando a String de inserção na variável sql!

H

E a conexão cara, cadê?

D

a conexao é essa como faço pra inserir ela no meio desse botao pra inserir os dados no banco?

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory {

    private static ConnectionFactory connectionFactory = new ConnectionFactory();
    private Connection connection = null;

    ConnectionFactory() {}
    public static ConnectionFactory getInstance() { return connectionFactory; }

    public Connection getConnection() throws ClassNotFoundException, SQLException {

        if (connection == null) {

            Class.forName("org.postgresql.Driver");
            connection = DriverManager.getConnection("jdbc:postgresql:TurmaN40", "postgres", "postgres");
        }
        return connection;
    }

    public void commit() throws SQLException {

        connection.commit();
        connection = null;
    }

    public void rollback() throws SQLException {

        connection.rollback();
        connection = null;
    }
}
D

a conexao é essa como faço pra inserir ela nesse botao? e os dados obrigada!

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class ConnectionFactory {

private static ConnectionFactory connectionFactory = new ConnectionFactory();
private Connection connection = null;

ConnectionFactory() {}
public static ConnectionFactory getInstance() { return connectionFactory; }

public Connection getConnection() throws ClassNotFoundException, SQLException {

    if (connection == null) {

        Class.forName("org.postgresql.Driver");
        connection = DriverManager.getConnection("jdbc:postgresql:TurmaN40", "postgres", "postgres");
    }
    return connection;
}

public void commit() throws SQLException {

    connection.commit();
    connection = null;
}

public void rollback() throws SQLException {

    connection.rollback();
    connection = null;
}

}

A

Olá daniferreira.

Esse tipo de dúvida indica que você tem conhecimentos rasos de Java e MySql, pois como você quer adicionar algo se tem apenas a classe de conexão?

Recomendo que você leia mais sobre o assunto…

Além disso, você pode achar muita coisa boa aqui mesmo no GUJ, como esse exemplinho básico: http://www.guj.com.br/java/46682-inserir-dados-no-mysql.

D

nao tenho só a classe conexao tenho a classe da jtable.......

tbm como botao......quero coloca a conexao dentro do botao.....

nao sei como fazer isso vou posta a classe da jtable pra vc!

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import Modelo.VendaProduto;
//import controle.Utilitarios;

// Ctrl+Shift+F => Formata o código
// Ctrl+A e Ctrl+i => Formata a seleção

public class EfetuarVenda extends JFrame {
	private JLabel rotulo1, rotulo2, rotulo3,rotulo4,rotulo5,rotulo6,rotulo7,rotulo8,rotulo9;
	private JTextField caixa1, caixa2, caixa3,caixa4,caixa5,caixa6,caixa7,caixa8,caixa9;
	private JButton botao1, botao2,botao3,botao4;
	private double total,valor,qtde,soma = 0; 
	private static EntityManagerFactory fabricaDeEntidades = null;

	private static EntityManager gerenciador = null;
	
	  DecimalFormat df= new DecimalFormat(",##0,00");

	public EfetuarVenda(EntityManagerFactory fabricaDeEntidades2, EntityManager gerenciador2) {
		super("Vendas");
		Container tela = getContentPane();

		tela.setLayout(null);
		fabricaDeEntidades=fabricaDeEntidades2;
		gerenciador=gerenciador2;
	        
		rotulo1 = new JLabel("Codigo");
		rotulo2 = new JLabel("Cliente:");
		rotulo3 = new JLabel("Total:");
		rotulo4 = new JLabel("Data:");
		rotulo5 = new JLabel("Código:");
		rotulo6 = new JLabel("Descrição:");
		rotulo7 = new JLabel("Qtde:");
		rotulo8 = new JLabel("Valor:");
		rotulo9 = new JLabel("Total:");

		caixa1 = new JTextField();
		caixa2 = new JTextField();
		caixa3 = new JTextField();
		caixa3.setText("0.00");
		caixa4 = new JTextField();
		caixa5 = new JTextField();
		caixa6 = new JTextField();
		caixa7 = new JTextField();
		caixa8 = new JTextField();
		caixa9 = new JTextField();

		botao1 = new JButton("Ok");
		botao2 = new JButton("Salvar Nota de Venda");
		botao3 = new JButton("Calcular Orçamento");
		botao4 = new JButton("Calcular Pagamento");

		// coluna, linha, largura, altura
		rotulo1.setBounds(10, 19, 47, 20);
		caixa1.setBounds(68, 19, 40, 20);

		botao1.setBounds(630,100, 50, 20);
		botao2.setBounds(21, 510, 200, 50);
		botao3.setBounds(230, 510, 200, 50);
		botao4.setBounds(440, 510, 200, 50);

		rotulo2.setBounds(140, 19, 100, 20);
		caixa2.setBounds(190, 19, 232, 20);

		rotulo3.setBounds(530, 50, 70, 60);
		caixa3.setBounds(560, 50, 120, 40);
		
		rotulo4.setBounds(10, 60, 100, 20);
		caixa4.setBounds(68, 60, 179, 20);
		
		rotulo5.setBounds(10,100, 47, 20);
		caixa5.setBounds(68,100, 40, 20);
		
		rotulo6.setBounds(120, 100, 100, 20);
		caixa6.setBounds(190, 100, 180, 20);
		
		rotulo7.setBounds(370, 100, 80, 20);
		caixa7.setBounds(410, 100, 50, 20);
		
		rotulo8.setBounds(460, 100, 50, 20);
		caixa8.setBounds(500,100, 50, 20);
		
		rotulo9.setBounds(550, 100, 50, 20);
		caixa9.setBounds(580, 100, 50, 20);
		
		tela.add(rotulo1);
		tela.add(caixa1);

		tela.add(rotulo2);
		tela.add(caixa2);

		tela.add(botao1);
		tela.add(botao2);
		tela.add(botao3);
		tela.add(botao4);

		tela.add(rotulo3);
		tela.add(caixa3);
		
		tela.add(rotulo4);
		tela.add(caixa4);
		
		tela.add(rotulo5);
		tela.add(caixa5);
		
		tela.add(rotulo6);
		tela.add(caixa6);
		
		tela.add(rotulo7);
		tela.add(caixa7);
		
		tela.add(rotulo8);
		tela.add(caixa8);
		
		tela.add(rotulo9);
		tela.add(caixa9);
		
		final DefaultTableModel modelo;

	    modelo = new 
	    DefaultTableModel();
	    
	    // constrói a tabela
	    JTable tabela = new JTable(modelo);
	    
	    // Cria duas colunas
	    modelo.addColumn("Código");
	    modelo.addColumn("Descrição");
	    modelo.addColumn("Qtde");
	    modelo.addColumn("Valor");
	    modelo.addColumn("Total");
	    
	    JScrollPane scrollPane = new JScrollPane(tabela);
	    scrollPane.setBounds(20, 150, 640, 350);
		tela.add(scrollPane);
		
		botao1.addActionListener(new ActionListener() {     
		            public void actionPerformed(ActionEvent e) {     
		                // Persistir dados     
		                // inclusão de um novo registro
		            	//double total,valor,qtde,soma = 0;     
		                valor=Double.parseDouble(caixa8.getText());     
		                    qtde=Double.parseDouble(caixa7.getText());     
		                    total=(qtde*valor);   
		                    soma+=(qtde*valor);
		                    //Esse + (antes do igual) vai acumular os valores em soma.  
		                    caixa3.setText(""+soma);     
		                    caixa9.setText(""+total);     
		                modelo.addRow(new String [] {caixa5.getText(), caixa6.getText(), caixa7.getText(), caixa8.getText(), caixa9.getText()} );
		                caixa1.setText("");
		                caixa2.setText("");          
		                caixa4.setText("");
		                caixa5.setText("");
		                caixa6.setText("");
		                caixa7.setText("");     
		                caixa8.setText("");   
		                caixa9.setText("");
		            }  
		        });  

				botao2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JTable tabela = new JTable(modelo);
				//ConnectionFactory con = new ConnectionFactory();
				int linha = modelo.getRowCount();
				int col = modelo.getColumnCount();
				String sqlinsert = "INSERT into VendaProduto (id_venda,descricao,qtde,valor,total) values ('"
						+ caixa5.getText()
						+ "','"
						+ caixa6.getText()
						+ "','"
						+ caixa7.getText()
						+ "','"
						+ caixa8.getText()
						+ "','"
						+ caixa9.getText()
						+ "','"
						+ modelo.getValueAt(0, 0)
						+ "','"
						+ modelo.getValueAt(0, 1)
						+ "','"
						+ modelo.getValueAt(0, 2)
						+ "','"
						+ modelo.getValueAt(0, 3)
						+ "','"
						+ modelo.getValueAt(0, 4) + "')";

				JOptionPane.showMessageDialog(null,
						"Gravação realizada com sucesso");

			}
		}); 
	botao3.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			// fecha a janela
			CalculcarOrcamento c = new CalculcarOrcamento(fabricaDeEntidades, gerenciador);
    }
      });
	botao4.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			// fecha a janela
			CalcularPagamento c = new CalcularPagamento(fabricaDeEntidades, gerenciador);
    }
      });

// setSize(largura, altura);
setSize(700, 610);
setVisible(true);
setLocationRelativeTo(null);
}

	public static void main(String[] args) {

		fabricaDeEntidades = Persistence
				.createEntityManagerFactory("TurmaN40PostgreSQL");

		gerenciador = fabricaDeEntidades.createEntityManager();

		EfetuarVenda app = new EfetuarVenda(fabricaDeEntidades, gerenciador);
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}

		}
D

como vc viu eu ja criei o botao 2 que seria o que gravaria os dados da tabela no banco

só que nao sei como inserir a conexao dentro ele mostra que esta salvando mais nao salva no banco provavelmente ta errado o negocio da conexao…

talvez eu devesse fazer de outro jeito…

D
stmt = dbConnection.createStatement();  
				rs = stmt.executeQuery("select codigo from venda");  
				rs.next();  
				codigo = rs.getInt("codigo")  + 1;  
				query = "insert into venda ("+  
				        "codigo,"+  
				        "descricao,"+  
				        "qtde,"+  
				        "valor,"+  
				        "total"+  
				        ") values (" +  
				        caixa5+","+  
				        "'"+caixa6.getText()+"',"+  
				        "'"+caixa7.getText()+"',"+  
				        "'"+caixa8.getText()+"',"+  
				        "'"+caixa9.getText()+"',"+  
				        ")";  
				int result = stmt.executeUpdate( query );  
				  
				if ( result == 1 ) {  
				   JOptionPane.showMessageDialog(null, "Registro incluido com sucesso." , "Aviso", JOptionPane.PLAIN_MESSAGE );  
				   macao = "A";  
				   stmt.close();  
				   stmt = dbConnection.createStatement();  
				   stmt.close();  
				   tabela.preencheTabela(false,rs,colunasTabela, tamanhoColunas, posicaoTabela,nomeDosCampos);  
				}  
				else {  
				   JOptionPane.showMessageDialog(null, "Falha na inclusão!" , "Aviso", JOptionPane.WARNING_MESSAGE );  
				}  
				stmt = dbConnection.createStatement();  
				   rs = stmt.executeQuery("select * venda where id ='" + caixa5 + "'");  
				   rs.next();  
				}  
				query = "update venda set "+  
				        "codigo='"+caixa5.getText()+"',"+  
				        "descricao='"+caixa6.getText()+"',"+  
				        "qtde='"+caixa7.getText()+"',"+  
				        "valor='"+caixa8.getText()+"',"+  
				        "total='"+caixa9.getText()+"',"+ 
				        "where id ='" + caixa5 + "'";  
				  
				int result = stmt.executeUpdate( query );  
				  
				if ( result == 1 ) {  
				   JOptionPane.showMessageDialog(null, "venda alterada com sucesso." , "Aviso", JOptionPane.PLAIN_MESSAGE );  
				  
				}  
				else {  
				   JOptionPane.showMessageDialog(null, "Falha na alteração!" , "Aviso", JOptionPane.WARNING_MESSAGE );  
				}  
	        });
D

fiz assim ta dando uns erro por causa da conexao eu nao sei como vc fez a conexao se tiver o exemplo ajudaria bastante té mais!

V

O seu código do botão 2 precisa de um try, por isso que ele diz que gravou mas na verdade vc está apenas usando o JOptionPane para informar ao usuário que a gravação foi feita com sucesso independentemente de erro ou não. Eu uso esse aqui na minha aplicação web.

try {
       seu código
}
catch ( SQLException sqlex ) {
             //Exceções SQL
             sqlex.printStackTrace();
             sHTML += "Falha comando SQL: " + sqlex.toString();
D
botao2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try{
					JTable tabela = new JTable(modelo);
					ConnectionFactory con = new ConnectionFactory();
					int linha = modelo.getRowCount();
					int col = modelo.getColumnCount();
					String sqlinsert = "INSERT into VendaProduto (id_venda,descricao,qtde,valor,total) values ('"
							+ caixa5.getText()
							+ "','"
							+ caixa6.getText()
							+ "','"
							+ caixa7.getText()
							+ "','"
							+ caixa8.getText()
							+ "','"
							+ caixa9.getText()
							+ "','"
							+ modelo.getValueAt(0, 0)
							+ "','"
							+ modelo.getValueAt(0, 1)
							+ "','"
							+ modelo.getValueAt(0, 2)
							+ "','"
							+ modelo.getValueAt(0, 3)
							+ "','"
							+ modelo.getValueAt(0, 4) + "')";
				
					JOptionPane.showMessageDialog(null,
				"Gravação realizada com sucesso");
				}catch ( SQLException sqlex ) {  
		             //Exceções SQL  
		             sqlex.printStackTrace();  
		             sHTML += "Falha comando SQL: " + sqlex.toString();  
			}
		});

sim eu fiz isso como disse mais acabou que deu erro nas chaves....

D

essa parte aqui é o q?

esse shtml?

D

essa linha ta dando erro

V

É uma String que recebe o corpo da minha página, acho que pra sua aplicação não fará muito sentido, em fim, coloca seu código num try identificar o erro.

Qual IDE vc está utilizando?

D

to usando eclipse

V

Faz assim então:
Remove aquele try que te falei.
Selecione o bloco, clique botão direito selecione Surround With e try/catch block.
Executa e veja qual erro.

D

acho que vou fazer o seguinte vc conhece algum material sobre jtable pra gravr dados nao é possivel que nao tenha???

vc poderia me passa né

D

eu axo q nao deve ser dificil eu só nao estou acertando como fazer deve ser isso

D

pronto mudei o código olha comno ta agora, agora ta gravando no banco mais só a primeira linha da tabela como grava o resto tem idéia?

botao2.addActionListener(new ActionListener() {  
		                    public void actionPerformed(ActionEvent e) {  
		                        JTable tabela = new JTable(modelo); 
		                        //int linha = modelo.getRowCount();   
	                             //int col = modelo.getColumnCount();
		                        try   
		                        {   
		                        int linha = modelo.getRowCount();   
			                    int col = modelo.getColumnCount();
		                           Class.forName("org.postgresql.Driver");   
		                           Connection con = DriverManager.getConnection ("jdbc:postgresql:TurmaN40","postgres","postgres");   
		                        System.out.println("Conexao OK");   
		                        Statement st = con.createStatement();   
		                        ResultSet rs = st.executeQuery("INSERT into VendaProduto (codigo,descricao,qtde,valor,total) values ('"+     
			                            modelo.getValueAt(0,0)+"','"+   
		                                modelo.getValueAt(0,1)+"','"+   
			                            modelo.getValueAt(0,2)+"','"+   
			                            modelo.getValueAt(0,3)+"','"+   
			                           modelo.getValueAt(0,4)+"')");     
 
		                        	 JOptionPane.showMessageDialog(null,"Gravação realizada com sucesso");    
		                        	st.close();   
		                        	con.close();   
		                        	}catch (Exception e1){   
		                        	e1.printStackTrace();   
		                        	return;   
		                        	}}
		            });
V
Bom, seu programa tem vários problemas:

a) Não existem classes de negócios definidas;

b) Está misturando lógica de banco com lógica de interface;

c) Está usando DefaultTableModel.

Eu começaria reorganizando a casa. Seus dados correspondem a algum tipo de objeto. Crie uma classe para esse objeto (Venda, por exemplo).
Em seguida, faça uma outra classe que carrega e salva os dados desta no banco de dados (VendaDao). O método de carga deverá se encarregar de rodar a consulta, mas retornará apenas uma lista de objetos da sua classe.

Finalmente, faça um VendaTableModel que apresentará os dados da classe de venda na tabela.

A partir daí fica bem fácil fazer tudo o que você quer. E fica também bem separado seu sistema, como tem que ser.

Ah sim, e não use o Statement da forma que você está fazendo. O correto é usar o PreparedStatement. Assim seu sistema não quebra se alguém vender um Mcdonald’s Chips.

D

o objeto direcionado é essa classe

package Modelo;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.swing.table.DefaultTableModel;

@Entity
public class VendaProduto {
@Id
	private int codigo;
	private String descricao;
	private int qtde;
	private double valor;
	private double total;
	public int getCodigo() {
		return codigo;
	}
	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public int getQtde() {
		return qtde;
	}
	public void setQtde(int qtde) {
		this.qtde = qtde;
	}
	public double getTotal() {
		return total;
	}
	public void setTotal(double total) {
		this.total = total;
	}
	public double getValor() {
		return valor;
	}
	public void setValor(double valor) {
		this.valor = valor;
	}
}
V

Legal. E você tem o DAO dessa classe, que carrega uma lista de VendaProduto?

Nesse caso, o último passo que estaria faltando seria escrever seu TableModel.

Afinal, rodar query no meio do actionListener, e ainda lendo dos dados do JTable campo-a-campo daquele jeito é um código extremamente mal estruturado.

D

eu sou iniciante né foi do jeito que eu aprendi os exemplos de table model que eu vi a maioria contém erros se vc puder me passar um exemplo pra mim que funcione eu largo mao do default table model

pra mim entender !

D

e ja é carregado uma tabela pelo fato de conter hibernate fabrica de entidades…a tabela é criada automatica…

V

O primeiro exemplo do post que citei tem um exemplo compilável:
http://www.guj.com.br/java/225793-exemplo-de-tablemodel#1156821

D

eu só quero criar uma tablea inserir os dados nelas e salvar no banco mais nadaa eles sao inseridos por addrow cada item desse tem uma tela o codigo da tela era esse

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DecimalFormat;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import Modelo.VendaProduto;
//import controle.Utilitarios;

// Ctrl+Shift+F => Formata o código
// Ctrl+A e Ctrl+i => Formata a seleção

public class EfetuarVenda extends JFrame {
	private JLabel rotulo1, rotulo2, rotulo3,rotulo4,rotulo5,rotulo6,rotulo7,rotulo8,rotulo9;
	private JTextField caixa1, caixa2, caixa3,caixa4,caixa5,caixa6,caixa7,caixa8,caixa9;
	private JButton botao1, botao2,botao3,botao4;
	private double total,valor,qtde,soma = 0; 
	private static EntityManagerFactory fabricaDeEntidades = null;

	private static EntityManager gerenciador = null;
	
	  DecimalFormat df= new DecimalFormat(",##0,00");

	public EfetuarVenda(EntityManagerFactory fabricaDeEntidades2, EntityManager gerenciador2) {
		super("Vendas");
		Container tela = getContentPane();

		tela.setLayout(null);
		fabricaDeEntidades=fabricaDeEntidades2;
		gerenciador=gerenciador2;
	        
		rotulo1 = new JLabel("Codigo");
		rotulo2 = new JLabel("Cliente:");
		rotulo3 = new JLabel("Total:");
		rotulo4 = new JLabel("Data:");
		rotulo5 = new JLabel("Código:");
		rotulo6 = new JLabel("Descrição:");
		rotulo7 = new JLabel("Qtde:");
		rotulo8 = new JLabel("Valor:");
		rotulo9 = new JLabel("Total:");

		caixa1 = new JTextField();
		caixa2 = new JTextField();
		caixa3 = new JTextField();
		caixa3.setText("0.00");
		caixa4 = new JTextField();
		caixa5 = new JTextField();
		caixa6 = new JTextField();
		caixa7 = new JTextField();
		caixa8 = new JTextField();
		caixa9 = new JTextField();

		botao1 = new JButton("Ok");
		botao2 = new JButton("Salvar Nota de Venda");
		botao3 = new JButton("Calcular Orçamento");
		botao4 = new JButton("Calcular Pagamento");

		// coluna, linha, largura, altura
		rotulo1.setBounds(10, 19, 47, 20);
		caixa1.setBounds(68, 19, 40, 20);

		botao1.setBounds(630,100, 50, 20);
		botao2.setBounds(21, 510, 200, 50);
		botao3.setBounds(230, 510, 200, 50);
		botao4.setBounds(440, 510, 200, 50);

		rotulo2.setBounds(140, 19, 100, 20);
		caixa2.setBounds(190, 19, 232, 20);

		rotulo3.setBounds(530, 50, 70, 60);
		caixa3.setBounds(560, 50, 120, 40);
		
		rotulo4.setBounds(10, 60, 100, 20);
		caixa4.setBounds(68, 60, 179, 20);
		
		rotulo5.setBounds(10,100, 47, 20);
		caixa5.setBounds(68,100, 40, 20);
		
		rotulo6.setBounds(120, 100, 100, 20);
		caixa6.setBounds(190, 100, 180, 20);
		
		rotulo7.setBounds(370, 100, 80, 20);
		caixa7.setBounds(410, 100, 50, 20);
		
		rotulo8.setBounds(460, 100, 50, 20);
		caixa8.setBounds(500,100, 50, 20);
		
		rotulo9.setBounds(550, 100, 50, 20);
		caixa9.setBounds(580, 100, 50, 20);
		
		tela.add(rotulo1);
		tela.add(caixa1);

		tela.add(rotulo2);
		tela.add(caixa2);

		tela.add(botao1);
		tela.add(botao2);
		tela.add(botao3);
		tela.add(botao4);

		tela.add(rotulo3);
		tela.add(caixa3);
		
		tela.add(rotulo4);
		tela.add(caixa4);
		
		tela.add(rotulo5);
		tela.add(caixa5);
		
		tela.add(rotulo6);
		tela.add(caixa6);
		
		tela.add(rotulo7);
		tela.add(caixa7);
		
		tela.add(rotulo8);
		tela.add(caixa8);
		
		tela.add(rotulo9);
		tela.add(caixa9);
		
		final DefaultTableModel modelo;

	    modelo = new 
	    DefaultTableModel();
	    
	    // constrói a tabela
	    JTable tabela = new JTable(modelo);
	    
	    // Cria duas colunas
	    modelo.addColumn("Código");
	    modelo.addColumn("Descrição");
	    modelo.addColumn("Qtde");
	    modelo.addColumn("Valor");
	    modelo.addColumn("Total");
	    
	    JScrollPane scrollPane = new JScrollPane(tabela);
	    scrollPane.setBounds(20, 150, 640, 350);
		tela.add(scrollPane);
		
		botao1.addActionListener(new ActionListener() {     
		            public void actionPerformed(ActionEvent e) {     
		                // Persistir dados     
		                // inclusão de um novo registro
		            	//double total,valor,qtde,soma = 0;     
		                valor=Double.parseDouble(caixa8.getText());     
		                    qtde=Double.parseDouble(caixa7.getText());     
		                    total=(qtde*valor);   
		                    soma+=(qtde*valor);
		                    //Esse + (antes do igual) vai acumular os valores em soma.  
		                    caixa3.setText(""+soma);     
		                    caixa9.setText(""+total);     
		                modelo.addRow(new String [] {caixa5.getText(), caixa6.getText(), caixa7.getText(), caixa8.getText(), caixa9.getText()} );
		                caixa1.setText("");
		                caixa2.setText("");          
		                caixa4.setText("");
		                caixa5.setText("");
		                caixa6.setText("");
		                caixa7.setText("");     
		                caixa8.setText("");   
		                caixa9.setText("");
		            }  
		        });  

		        botao2.addActionListener(new ActionListener() {  
		                    public void actionPerformed(ActionEvent e) {  
		                        JTable tabela = new JTable(modelo);
		                        //int linha = modelo.getRowCount();   
	                             //int col = modelo.getColumnCount();
		                        try{
		                        int linha = modelo.getRowCount();   
			                    int col = modelo.getColumnCount();
		                           Class.forName("org.postgresql.Driver");   
		                           Connection con = DriverManager.getConnection ("jdbc:postgresql:TurmaN40","postgres","postgres");   
		                        System.out.println("Conexao OK");   
		                        Statement st = con.createStatement();   
		                        ResultSet rs = st.executeQuery("INSERT into VendaProduto (codigo,descricao,qtde,valor,total) values ('"+ 
                                        modelo.getValueAt(0,0)+"','"+   
		                                modelo.getValueAt(0,1)+"','"+   
			                            modelo.getValueAt(0,2)+"','"+   
			                            modelo.getValueAt(0,3)+"','"+   
			                           modelo.getValueAt(0,4)+"')");   

 
		                        	 JOptionPane.showMessageDialog(null,"Gravação realizada com sucesso");  
		                        	
		                        	st.close();   
		                        	con.close();   
		                        	}catch (Exception e1){   
		                        	e1.printStackTrace();   
		                        	return;   
		                        	}}
		            });     			       
	botao3.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			// fecha a janela
			CalculcarOrcamento c = new CalculcarOrcamento(fabricaDeEntidades, gerenciador);
    }
      });
	botao4.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			// fecha a janela
			CalcularPagamento c = new CalcularPagamento(fabricaDeEntidades, gerenciador);
    }
      });

// setSize(largura, altura);
setSize(700, 610);
setVisible(true);
setLocationRelativeTo(null);
}

	public static void main(String[] args) {

		fabricaDeEntidades = Persistence
				.createEntityManagerFactory("TurmaN40PostgreSQL");

		gerenciador = fabricaDeEntidades.createEntityManager();

		EfetuarVenda app = new EfetuarVenda(fabricaDeEntidades, gerenciador);
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}

		}
D

eu quero criar uma table ai nessa tela por isso vou ver o exemplo la e tira o default table model dai…

V

Sim, e o jeito é usando o TableModel. :slight_smile:

Senti uma preguiça de estudar aqui?

D

eu testei o exemplo desse carinha ele ta dando erros em algumas linhas eu to usando o eclipse 3.2

D
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 * Implementação de Table Model para exibir os Sócios.
 * 
 * @author Eric Yuzo
 */
public class SocioTableModel extends AbstractTableModel {

	/* Lista de Sócios que representam as linhas. */
	private List<Socio> linhas;

	/* Array de Strings com o nome das colunas. */
	private String[] colunas = new String[] {
			"Nome", "Telefone", "Data de Cadastro", "Mensalidade"};


	/* Cria um SocioTableModel vazio. */
	public SocioTableModel() {
		linhas = new ArrayList<Socio>();
	}

	/* Cria um SocioTableModel carregado com
	 * a lista de sócios especificada. */
	public SocioTableModel(List<Socio> listaDeSocios) {
		linhas = new ArrayList<Socio>(listaDeSocios);
	}


	/* Retorna a quantidade de colunas. */
	@Override
	public int getColumnCount() {//erro nesta linha
		// Está retornando o tamanho do array "colunas".
		// Mas como o array é fixo, vai sempre retornar 4.
		return colunas.length;
	}

	/* Retorna a quantidade de linhas. */
	@Override
	public int getRowCount() {//erro nesta linha
		// Retorna o tamanho da lista de sócios.
		return linhas.size();
	}

	/* Retorna o nome da coluna no índice especificado.
	 * Este método é usado pela JTable para saber o texto do cabeçalho. */
	@Override
	public String getColumnName(int columnIndex) {
		// Retorna o conteúdo do Array que possui o nome das colunas
		// no índice especificado.
		return colunas[columnIndex];
	};

	/* Retorna a classe dos elementos da coluna especificada.
	 * Este método é usado pela JTable na hora de definir o editor da célula. */
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		// Retorna a classe referente a coluna especificada.
		// Aqui é feito um switch para verificar qual é a coluna
		// e retornar o tipo adequado. As colunas são as mesmas
		// que foram especificadas no array "colunas".
		switch (columnIndex) {
		case 0: // Primeira coluna é o nome, que é uma String.
			return String.class;
		case 1: // Segunda coluna é o telefone, que também é uma String..
			return String.class;
		case 2: // Terceira coluna é a data de cadastro,
				// apesar de ser do tipo Calendar,
				// estou retornando Date por causa da formatação.
			return Date.class;
		case 3: // Quarta coluna é a mensalidade, um double.
			return Double.class;
		default:
			// Se o índice da coluna não for válido, lança um
			// IndexOutOfBoundsException (Exceção de índice fora dos limites).
			// Não foi necessário verificar se o índice da linha é inválido,
			// pois o próprio ArrayList lança a exceção caso seja inválido.
			throw new IndexOutOfBoundsException("columnIndex out of bounds");
		}
	}

	/* Retorna o valor da célula especificada
	 * pelos índices da linha e da coluna. */
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {//erro nesta linha
		// Pega o sócio da linha especificada.
		Socio socio = linhas.get(rowIndex);

		// Retorna o campo referente a coluna especificada.
		// Aqui é feito um switch para verificar qual é a coluna
		// e retornar o campo adequado. As colunas são as mesmas
		// que foram especificadas no array "colunas".
		switch (columnIndex) {
		case 0: // Primeira coluna é o nome.
			return socio.getNome();
		case 1: // Segunda coluna é o telefone.
			return socio.getTelefone();
		case 2: // Terceira coluna é a data de cadastro.
			return socio.getDataDeCadastro().getTime();
		case 3: // Quarta coluna é a mensalidade.
			return socio.getMensalidade();
		default:
			// Se o índice da coluna não for válido, lança um
			// IndexOutOfBoundsException (Exceção de índice fora dos limites).
			// Não foi necessário verificar se o índice da linha é inválido,
			// pois o próprio ArrayList lança a exceção caso seja inválido.
			throw new IndexOutOfBoundsException("columnIndex out of bounds");
		}
	}

	/* Seta o valor da célula especificada
	 * pelos índices da linha e da coluna.
	 * Aqui ele está implementado para não fazer nada,
	 * até porque este table model não é editável. */
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {};

	/* Retorna um valor booleano que define se a célula em questão
	 * pode ser editada ou não.
	 * Este método é utilizado pela JTable na hora de definir o editor da célula.
	 * Neste caso, estará sempre retornando false, não permitindo que nenhuma
	 * célula seja editada. */
	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		return false;
	}


	////////////////////////////////////////////////////////////
	// Os métodos declarados até aqui foram as implementações //
	// de TableModel, que são continuamente utilizados        //
	// pela JTable para definir seu comportamento,            //
	// por isso o nome Table Model (Modelo da Tabela).        //
	//                                                        //
	// A partir de agora, os métodos criados serão            //
	// particulares desta classe. Eles serão úteis            //
	// em algumas situações.                                  //
	////////////////////////////////////////////////////////////


	/* Retorna o sócio da linha especificada. */
	public Socio getSocio(int indiceLinha) {
		return linhas.get(indiceLinha);
	}
	
	/* Adiciona um registro. */
	public void addSocio(Socio socio) {
		// Adiciona o registro.
		linhas.add(socio);

		// Pega a quantidade de registros e subtrai um para achar
		// o último índice. É preciso subtrair um, pois os índices
		// começam pelo zero.
		int ultimoIndice = getRowCount() - 1;

		// Reporta a mudança. O JTable recebe a notificação
		// e se redesenha permitindo que visualizemos a atualização.
		fireTableRowsInserted(ultimoIndice, ultimoIndice);
	}

	/* Remove a linha especificada. */
	public void removeSocio(int indiceLinha) {
		// Remove o sócio da linha especificada.    	
		linhas.remove(indiceLinha);

		// Reporta a mudança. O JTable recebe a notificação
		// e se redesenha permitindo que visualizemos a atualização.
		fireTableRowsDeleted(indiceLinha, indiceLinha);
	}

	/* Adiciona uma lista de sócios ao final dos registros. */
	public void addListaDeSocios(List<Socio> socios) {
		// Pega o tamanho antigo da tabela.
		int tamanhoAntigo = getRowCount();

		// Adiciona os registros.
		linhas.addAll(socios);

		// Reporta a mudança. O JTable recebe a notificação
		// e se redesenha permitindo que visualizemos a atualização.
		fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);
	}

	/* Remove todos os registros. */
	public void limpar() {
		// Remove todos os elementos da lista de sócios.
		linhas.clear();

		// Reporta a mudança. O JTable recebe a notificação
		// e se redesenha permitindo que visualizemos a atualização.
		fireTableDataChanged();
	}

	/* Verifica se este table model está vazio. */
	public boolean isEmpty() {
		return linhas.isEmpty();
	}

}

deu erro nessas linhas no exemplo do carinha

D

Exception in thread “main” java.lang.Error: Unresolved compilation problem:
The method run() of type new Runnable(){} must override a superclass method

at SocioTableModelTest.main(SocioTableModelTest.java:114)
D

nao to com preguiça

A

Desculpa daniferreira, mas tá!

É óbvio que esse código não vai rodar, pois ele não tem um método main! Todo programador java é obrigado a saber isso… É básico!

O método main está no SocioTableModelTest.java. Basta criar um projeto, adicionar os arquivos e executar.

Por sinal, é um ótimo exemplo! Eu chego a achar que esse seu código é um “mix” de outros códigos…

Esse código aí é uma base pra você moldar o seu…

Estude MVC pra estruturar teu código. Se você é um iniciante, sugiro começar com programas para iniciantes! É uma dica! Depois, você vai se sentir muito mais seguro pra construir códigos mais elaborados naturalmente!

#ficadica

D

ok é que to montando um sistema pra vidraçaria ja fiz mta coisa só precisava dessa table ai pra termina mais d boas vou seguir a dica valeu ai :stuck_out_tongue:

Criado 28 de julho de 2011
Ultima resposta 30 de jul. de 2011
Respostas 34
Participantes 5