Evento de botao[resolvido]

20 respostas
D

estou querendo fazer um evento no botao que grava os dados de uma jtable

mais nao sei por onde começar alguém pode me dar uma dicaa ou um exemplo

os campos da tabela são codigo, descricao, qtde, valor e total

acredito que para pegar valores seja assim segue o código do começo do botao
salvar nota de venda estou usando hibernate quem puder me ajudaaa ficarei grataa!quero gravar no banco de dados postgree

botao2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// fecha a janela
				 JTable tabela = new JTable(modelo);
				caixa5.setText((String) tabela.getModel().getValueAt(tabela.getSelectedRow() ,0));    
				caixa6.setText((String) tabela.getModel().getValueAt(tabela.getSelectedRow() ,1));
				caixa7.setText((String) tabela.getModel().getValueAt(tabela.getSelectedRow() ,2));
				caixa8.setText((String) tabela.getModel().getValueAt(tabela.getSelectedRow() ,3));
				caixa9.setText((String) tabela.getModel().getValueAt(tabela.getSelectedRow() ,4));
				
				
	 
				}
	        });

20 Respostas

P
ola, tu queres gravar os dados da tabela para o banco de dados? tu começaste de forma correta,depois de criar o botao tu adicona o evento nele
botao.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {  
               
                }  
            });

mas tu queres salvar tudo que tem nesta tabela?ou algo de certa coluna ou linha especifica?
veja se este forum te ajuda[url]http://javafree.uol.com.br/topic-854226-Salvar-JTable-para-PostgreSQL.html[/url] ou este [url]http://www.guj.com.br/java/244378-salvar-dados-do-jtable-no-banco-e-mostrar_dados-do-banco-em-um-jtable-[/url]
At+

D

aeee mudei o código

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");

				}
	        });

fala que gravou mais nao esta aparecendo no banco ?

S

Olá daniferreira

não é bem assim:

tem que existir uma conexão com o banco de dados.

faça assim, esta é uma forma bem simples e foi como eu iniciei:

inserindo dados

stmt = dbConnection.createStatement();
              rs = stmt.executeQuery("select max(item) as item from patrimonio");
              rs.next();
              item = rs.getInt("item")  + 1;
              query = "insert into patrimonio ("+
                      "item,"+
                      "tombamento,"+
                      "descricao,"+
                      "data,"+
                      "setor,"+
                      "observacao,"+
                      "idsetor"+
                      ") values (" +
                      item+","+
                      "'"+tfNumeroTombamento.getText()+"',"+
                      "'"+tfDescricao.getText()+"',"+
                      "'"+tfDataTombamento.getText()+"',"+
                      "'"+tfSetor.getText()+"',"+
                      "'"+tfObservacao.getText()+"',"+
                      setor+
                      ")";
              int result = stmt.executeUpdate( query );

              if ( result == 1 ) {
                 JOptionPane.showMessageDialog(null, "Patrimônio 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 );
              }
           }

atualizando

stmt = dbConnection.createStatement();
                 rs = stmt.executeQuery("select * from patrimonio where id ='" + id_patrimonio + "'");
                 rs.next();
              }
              query = "update patrimonio set "+
                      "tombamento='"+tfNumeroTombamento.getText()+"',"+
                      "descricao='"+tfDescricao.getText()+"',"+
                      "data='"+tfDataTombamento.getText()+"',"+
                      "setor='"+tfSetor.getText()+"',"+
                      "observacao='"+tfObservacao.getText()+"',"+
                      "idsetor="+setor+
                      "where id ='" + id_patrimonio + "'";

              int result = stmt.executeUpdate( query );

              if ( result == 1 ) {
                 JOptionPane.showMessageDialog(null, "patrimônio alterado com sucesso." , "Aviso", JOptionPane.PLAIN_MESSAGE );

              }
              else {
                 JOptionPane.showMessageDialog(null, "Falha na alteração!" , "Aviso", JOptionPane.WARNING_MESSAGE );
              }
           }

Silvio Guedes

D

tem o exemplo da conexao que vc havia criado pra esse código?

porque cada um faz de um jeito a conexao…

e conforme for da erro…

tem o exemplo?

D

mudei meu código agora ta gravando no banco mais só a primeira linha da tabela tem idéia como gravar todas as linhas usando esse código?

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;   
		                        	}}
		            });
S

Olá daniferreira

você pode colocar um for para fazer isso usando seu exemplo acima:

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();   

--> coloque aqui seu for
                                       for (int i = 0; i < modelo.getRowCount(); i++) {

		                        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)+"')");     
                                      }

---> fim do for
 
		                        	 JOptionPane.showMessageDialog(null,"Gravação realizada com sucesso");    
		                        	st.close();   
		                        	con.close();   
		                        	}catch (Exception e1){   
		                        	e1.printStackTrace();   
		                        	return;   
		                        	}}
		            });

acho que isso deve funcionar.

Silvio Guedes

D

ta inserindo só um registro ainda!

S

Olá daniferreira

como você está introduzindo os dados na sua table? este evento ocorre em que momento?

botao2.addActionListener(new ActionListener()

quando eu trabalhava com Delphi fiz uma aplicação que ao digitar os items de um pedido, após digitar a quantidade e confirmar com enter ele executava a inserção dos dados na tabela.

você pode nos mostrar o código um pouco mais completo para analisarmos.

Silvio Guedes

D

sim posso sim

janela EfetuarVenda

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 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 i = modelo.getRowCount();     
                //int j = 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();     
               
            	for (int i=0; i < modelo.getRowCount(); i++){
            	for (int j = 0; j < modelo.getColumnCount(); j++){
           
                       //for (int i = 0; i <= modelo.getRowCount();) {  
                ResultSet rs = st.executeQuery("INSERT into VendaProduto (codigo,descricao,qtde,valor,total) values ('"+ 
                		caixa5.getText() + "','" +  
                        caixa6.getText() + "','" + 
                        modelo.getValueAt(i,0)+"','"+     
                        modelo.getValueAt(i,1)+"','"+     
                        modelo.getValueAt(i,2)+"','"+     
                        modelo.getValueAt(i,3)+"','"+     
                        modelo.getValueAt(i,4)+"','"+
                        caixa7.getText() + "','" +  
                        caixa8.getText() + "','" + 
                        caixa9.getText()+"')");
                
                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);

	}

		}

tabela no banco VendaProduto

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;
	}
}
S

Olá daniferreira

não vi um post seu falando da conexão, aí vai o exemplo:

coloque este código no seu frame principal

/**
   * Create the database connection (using Hypersonic DB - in memory) and initialize tables...
   */
  private void createConnection() {
    try {

   readConfig();
   try {
	Class.forName(driver); // Or any other driver
	System.out.println("driver loaded");
   } catch (Exception x) {
	System.out.println("Unable to load the driver class!");
	x.printStackTrace();
   }

   try {
	conn = DriverManager.getConnection(url, user, password);
        conn.commit();
	System.out.println("connection opened");
   } catch (SQLException x) {
 	System.out.println("Couldn't get connection!");
	x.printStackTrace();
   }

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

 public void readConfig() {
       Properties p = new Properties();
        try {
            InputStream con = this.getClass().getClassLoader().getResourceAsStream("config.properties");
            p.load(con);
        } catch (IOException ex) {
            ex.printStackTrace();
            Logger.getLogger(FramePrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
       url = "jdbc:"+p.getProperty("PROTOCOL")+"://"+p.getProperty("HOSTNAME")+"/"+p.getProperty("DATABASE");
       user = p.getProperty("USER");
       password = p.getProperty("PASSWORD");
       driver = "org.postgresql.Driver";
}

crie um arquivo com este nome: config.properties, digite os dados abaixo e coloque na pasta dos fontes da sua aplicação.

HOSTNAME=localhost ou o IP
DATABASE=banco de dados
USER=postgres
PASSWORD=seua senha
PROTOCOL=postgresql

pelo que eu vi, você digita na sua table os dados e depois executa o evento botao2.addActionListener é isso? ou você digita todas as linhas e depois executa o botao2.addActionListener?

coso seja de um em um não precisará do for.

no exemplo que lhe falei não precisa do segundo for com J ok?.

Silvio Guedes

S

Olá daniferreira

vi agora o que está acontecendo no seu código:

você está colocando 0 na no lugar do valor da linha corrente para salvar:

modelo.getValueAt(0,0)+"’,’"+

seria:

linha = modelo.getSelectedRow();
modelo.getValueAt(linha,0)+"’,’"+

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;   
		                        	}}
		            });

veja se é isto?

Silvio Guedes

D
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(linha,0)+"','"+     
                        modelo.getValueAt(linha,1)+"','"+     
                        modelo.getValueAt(linha,2)+"','"+     
                        modelo.getValueAt(linha,3)+"','"+     
                       modelo.getValueAt(linha,4)+"')");       

                     JOptionPane.showMessageDialog(null,"Gravação realizada com sucesso");       
                    st.close();     
                    con.close();     
                    }catch (Exception e1){     
                    e1.printStackTrace();     
                    return;     
                    }}   
    });

erro

java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source)
at EfetuarVenda$2.actionPerformed(EfetuarVenda.java:195)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

D

eu digito os valorees aperto o ok adiciona na tabela esse é o primeiro botao depois eu salvo o que foi adicionado na tabela que é esse botao q nao ta gravando isso…

D

pelo que vc viu a conexao com o banco ta sendo feita no próprio botao…

nao é atoa q ele salva a primeira linha que foi adicionada na tabela…

S

Olá daniferreira

não é uma maneira muito boa de se usar a conexão desta maneira, a conexão deve ser aberta um única vez e quando finalizar a aplicação então você fecha.

você não entendeu bem. Vamos lá:

(1) caso esteja inserindo dados na tabela e depois salvar tudo então você usa o for, (2) caso contrário identifique a linha que esteja inserindo naquele momento e salve os dados desta linha, salvando assim um registro de cada vez.

código para o primeiro caso (1):

botao2.addActionListener(new ActionListener() {     
            public void actionPerformed(ActionEvent e) {     
                JTable tabela = new JTable(modelo);    
                try     
                {     
                int linha = modelo.getRowCount();     
  
                   Class.forName("org.postgresql.Driver");     
                   Connection con = DriverManager.getConnection ("jdbc:postgresql:TurmaN40","postgres","postgres");     
                System.out.println("Conexao OK");     
                Statement st = con.createStatement();     

                for (int i=0; i < modelo.getRowCount(); i++){ 
              
                ResultSet rs = st.executeQuery("INSERT into VendaProduto (codigo,descricao,qtde,valor,total) values ('"+       
                        modelo.getValueAt(i,0)+"','"+     
                        modelo.getValueAt(i,1)+"','"+     
                        modelo.getValueAt(i,2)+"','"+     
                        modelo.getValueAt(i,3)+"','"+     
                       modelo.getValueAt(i,4)+"')");       

                  }

                     JOptionPane.showMessageDialog(null,"Gravação realizada com sucesso");       
                    st.close();     
                    con.close();     
                    }catch (Exception e1){     
                    e1.printStackTrace();     
                    return;     
                    }}   
    });

caso (2):

botao2.addActionListener(new ActionListener() {     
            public void actionPerformed(ActionEvent e) {     
                JTable tabela = new JTable(modelo);    
                try     
                {     
                int linha = modelo.getRowCount();     
  
                   Class.forName("org.postgresql.Driver");     
                   Connection con = DriverManager.getConnection ("jdbc:postgresql:TurmaN40","postgres","postgres");     
                System.out.println("Conexao OK");     
                Statement st = con.createStatement();     

                 linha = modelo.getSelectedRow(); 
              
                ResultSet rs = st.executeQuery("INSERT into VendaProduto (codigo,descricao,qtde,valor,total) values ('"+       
                        modelo.getValueAt(linha,0)+"','"+     
                        modelo.getValueAt(linha,1)+"','"+     
                        modelo.getValueAt(linha,2)+"','"+     
                        modelo.getValueAt(linha,3)+"','"+     
                       modelo.getValueAt(linha,4)+"')");       


                     JOptionPane.showMessageDialog(null,"Gravação realizada com sucesso");       
                    st.close();     
                    con.close();     
                    }catch (Exception e1){     
                    e1.printStackTrace();     
                    return;     
                    }}   
    });

Silvio Guedes

D

por incrivel q pareça o 1º código esta salvando uma linha só rs

o 2º esta dando no selectrow

vou te mostrar

Exception in thread “main” java.lang.Error: Unresolved compilation problem:
The method getSelectedRow() is undefined for the type DefaultTableModel

at EfetuarVenda.<init>(EfetuarVenda.java:193)
at EfetuarVenda.main(EfetuarVenda.java:241)

eu quero salvar todos os dados q foram inseridos na tabela de uma vez é uma tela de vendas quando a pessoa pega e faz a venda ela ja salva
vou te explicar vem uma pessoa faz a compra de um sabonete e uma pasta dental vai ficar assim

tabela
código descricao quantidade valor total
1 sabonete 2 2 4
2 pasta 1 2 2

salvar venda

ai no caso salva os dois de uma vez entendeu???

D

deu erro no selectrow eu errei ali encima

D

pode seerr q exista outra forma de fazer isso de uma forma mais facil eu aceito sugestao rs é uma tela de vendas…

D

oieee silvio brigadao foi resolvido aquii

o código era quase isso

só precisava instanciar a classe da tabela

S

Olá daniferreira

ok.

tenho uma dica para você, tem um framework chamado OpenSwing é muito bom dê uma olhada em:

http://oswing.sourceforge.net/

Silvio Guedes

Criado 28 de julho de 2011
Ultima resposta 2 de ago. de 2011
Respostas 20
Participantes 3