Dúvidas com Conexão, Menu e Button [RESOLVIDO]

8 respostas
M

Olá.

Eu tenho um menu aonde a actionPerformed não está funcionando, quando clico no item "Produtos", não executa nada. Segue código abaixo:

import java.awt.*;
import java.awt.event.*;

public class MenuPrincipal extends Frame implements ActionListener{
  private MenuItem miVendas;   
  private MenuItem miDevolucoes;
  private MenuItem miCancelamentos;      
  private MenuItem miLeituraX;   
  private MenuItem miProdutos;   
  private MenuItem miPessoas;   
  private MenuItem miPBMS;   
  private MenuItem miAjuda;   
  private MenuItem miSobre;   
  private Menu     menuVendas, menuCadastros, menuAjuda;

  public MenuPrincipal() {    

    super("Loja Exemplo");
    setSize(1024, 780);
    setLocation(0, 0);

    //Barra de menu
    MenuBar barraMenu = new MenuBar();

    //Menus suspensos
    Menu menuVendas          = new Menu("Vendas");
    Menu menuCadastros       = new Menu("Cadastros");  
    Menu menuAjuda           = new Menu("Ajuda");

    //Itens do menu Vendas
    MenuItem miVendas        = new MenuItem("Vendas");
    MenuItem miDevolucoes    = new MenuItem("Devoluções");
    MenuItem miCancelamentos = new MenuItem("Cancelamentos");
    MenuItem miLeituraX      = new MenuItem("Leitura X");

    //Itens do menu Cadastros
    MenuItem miProdutos      = new MenuItem("Produtos");       
    MenuItem miPessoas       = new MenuItem("Pessoas");
    MenuItem miPBMS          = new MenuItem("PBM´s");

    //Itens do menu ajuda
    MenuItem miAjuda         = new MenuItem("Ajuda");
    MenuItem miSobre         = new MenuItem("Sobre");

    //Adicionando itens ao menu Vendas
    menuVendas.add(miVendas);
    menuVendas.add(miDevolucoes);
    menuVendas.add(miCancelamentos);
    menuVendas.add(miLeituraX);

    //Adicionando ActionListener
    miVendas.addActionListener(this);
    miDevolucoes.addActionListener(this);
    miCancelamentos.addActionListener(this);
    miLeituraX.addActionListener(this);

    //Adicionando itens ao menu Cadastros    
    menuCadastros.add(miProdutos);    
    menuCadastros.add(miPessoas);
    menuCadastros.add(miPBMS);

    //Adicionando ActionListener
    miProdutos.addActionListener(this);
    miPessoas.addActionListener(this);
    miPBMS.addActionListener(this);

    //Adicionando itens ao menu Ajuda
    menuAjuda.add(miAjuda);
    menuAjuda.addSeparator();
    menuAjuda.add(miSobre);

    //Adicionando ActionListener
    miAjuda.addActionListener(this);
    miSobre.addActionListener(this);

    //adicionando menus suspensos a barra
    barraMenu.add(menuVendas);
    barraMenu.add(menuCadastros);
    barraMenu.add(menuAjuda);

    //adicionando barra ao menu do frame
    setMenuBar(barraMenu);
    addWindowListener(new CloseWindowAndExit());
  }

  public void actionPerformed(ActionEvent e) {   
    if (e.getSource()==miProdutos) {       
      //Produtos p = new Produtos();               <========== não cria Produtos
      //p.show();
      System.out.println("Passou por aqui...");  //<========== não passa por aqui  
    }
  }   

  static public void main (String args[]) {
    MenuPrincipal f = new MenuPrincipal();
    f.show();
  }
}

Em relação à conexão (com Postgres), eu tenho uma classe que faz a conexão corretamente e nela eu coloquei um rotina que insere com sucesso um item no cadastro de produtos. Porém, eu não estou sabendo usar esta conexão dentro da classe produtos, é caro que esta inserção eu não quero fazer dentro da classe conexão, coloquei apenas como exemplo.

Edição: eu havia pesquisado na NET e não tinha vistio nada, agora que postei aqui vi um exemplo de conexão que é um package, vou testar pra ver se o caminho é por aí.

import java.util.*;
import java.sql.*;

public class Conexao {
  public Conexao() {
    String driver = "org.postgresql.Driver";
    String user   = "postgres";
    String senha  = "1234";
    String url    = "jdbc:postgresql://localhost:5432/TESTE";
    //    
    try {
      Class.forName(driver);
      Connection con = null;
      con = (Connection) DriverManager.getConnection(url, user, senha);
      System.out.println("Conexao realizada com sucesso");


      //==============================================
      //Teste de inserção, funcionou ok
      //==============================================
      String sql;
      sql = "insert into produtos(descricao, ean, categoria, preco) values (" + "'" + "LOSARTANA 50MG" + "', '" + "7898148301720" + "'," + "1, 120)";   
      Statement stm = con.createStatement();
      ResultSet rs = stm.executeQuery(sql);    
      //==============================================


    } catch (ClassNotFoundException ex) {
        System.err.print(ex.getMessage());        
    } catch (SQLException e) {
        System.err.print(e.getMessage());        
    }  


  }
  public static void main(String[] args) { 
    Conexao c = new Conexao();
  }
}

E por último, eu tenho um tela de cadastros aonde o botão assume o tamanho todo da tela, não consigo deixá-lo no tamanho que desejo e logo abaixo dos TextFields:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.sql.*;


public class Produtos extends Frame implements ActionListener {
  private TextField ean, descricao, categoria, preco;
  private Button button1;
  private Label lean;
  private Label ldescricao;
  private Label lcategoria;
  private Label lpreco;


  public Produtos() {
    super("Cadastro de Produtos");
    setSize(1024, 780);
    setLocation(0, 0);
    //setLayout(new FlowLayout());

    lean = new Label ("EAN");
    ean = new TextField("", 13);    
    add(lean).setBounds(125, 70, 40, 20);
    lean.setBackground(SystemColor.control);
    add(ean).setBounds(170, 70, 100, 20);

    ldescricao = new Label ("Descrição");
    descricao = new TextField("", 50);
    add(ldescricao).setBounds(105, 120, 60, 20);
    ldescricao.setBackground(SystemColor.control);
    add(descricao).setBounds(170, 120, 500, 20);

    lcategoria = new Label ("Categoria");
    categoria = new TextField("1");
    add(lcategoria).setBounds(105, 170, 60, 20);
    lcategoria.setBackground(SystemColor.control);
    add(categoria).setBounds(170, 170, 20, 20);

    lpreco = new Label ("Preço");
    preco = new TextField("0.00", 12);
    lpreco.setBackground(SystemColor.control);
    add(lpreco).setBounds(127, 220, 37, 20);    
    add(preco).setBounds(170, 220, 60, 20);

    //instanciacao, registro e adicao do botao
    button1  = new Button("Incluir");
    button1.addActionListener(this);
    add(button1).setBounds(170, 300, 60, 20);
    
  }
  
  public void actionPerformed(ActionEvent e) {
  //  if (e.getSource()==button1) {
  //    tf2.setText(tf3.getText());
  //    tf3.setText("");
  //  } if (e.getSource()==tf4) {
  //    tf3.setText(tf4.getText());
  //    tf4.setText("");
  //  }
  }

  static public void main (String args[]) {
    Produtos p = new Produtos();
    p.addWindowListener(new CloseWindowAndExit());
    p.show();

    Conexao c = new Conexao();
	

  }
}

Este é meu primeiro post aqui, não sei se deveria tê-lo dividido em três posts distintos ou se pode ser assim mesmo. Se precisar editar algo, fiquem a vontade.

Abraços!

8 Respostas

S

No seu terceiro código, onde vc comentou o setLayout

vc coloca:

Aí ele obedece as dimensões que você definiu no setBounds.

M

Valeu pela resposta.

Abraços!

S

Tenta implementar dessa forma o ActionListener.
(O código dentro vai fechar a janela).

miProdutos.addActionListener( 

new ActionListener() 
{ 
public void actionPerformed(ActionEvent event) 
{ 
System.exit(0); 
} 
} 
);
S

Amigo, tá meio corrido pra mim, mas fiz algumas alterações (Considere mais a parte do evento). Além de substituir os componentes awt pelos swing que são muito mais completos e recomendaveis, pois não utilizam recursos nativos do Sistema Operacional.

import javax.swing.*;   
  
  
public class MenuPrincipal extends JFrame {   
  private JMenuItem miVendas;     
  private JMenuItem miDevolucoes;   
  private JMenuItem miCancelamentos;         
  private JMenuItem miLeituraX;     
  private JMenuItem miProdutos;     
  private JMenuItem miPessoas;     
  private JMenuItem miPBMS;     
  private JMenuItem miAjuda;     
  private JMenuItem miSobre;     
  private JMenu     menuVendas, menuCadastros, menuAjuda;   
  
  public MenuPrincipal() {       
  
    super("Loja Exemplo");   
    setSize(1024, 780);   
    setLocation(0, 0);   
  
    //Barra de menu   
    JMenuBar barraMenu = new JMenuBar();   
  
    //Menus suspensos   
    JMenu menuVendas          = new JMenu("Vendas");   
    JMenu menuCadastros       = new JMenu("Cadastros");     
    JMenu menuAjuda           = new JMenu("Ajuda");   
  
    //Itens do menu Vendas   
    JMenuItem miVendas        = new JMenuItem("Vendas");   
    JMenuItem miDevolucoes    = new JMenuItem("Devoluções");   
    JMenuItem miCancelamentos = new JMenuItem("Cancelamentos");   
    JMenuItem miLeituraX      = new JMenuItem("Leitura X");   
  
    //Itens do menu Cadastros   
    JMenuItem miProdutos      = new JMenuItem("Produtos");         
    JMenuItem miPessoas       = new JMenuItem("Pessoas");   
    JMenuItem miPBMS          = new JMenuItem("PBM´s");   
  
    //Itens do menu ajuda   
    JMenuItem miAjuda         = new JMenuItem("Ajuda");   
    JMenuItem miSobre         = new JMenuItem("Sobre");   
  
    //Adicionando itens ao menu Vendas   
    menuVendas.add(miVendas);   
    menuVendas.add(miDevolucoes);   
    menuVendas.add(miCancelamentos);   
    menuVendas.add(miLeituraX);   
  
     
  
    //Adicionando itens ao menu Cadastros       
    menuCadastros.add(miProdutos);       
    menuCadastros.add(miPessoas);   
    menuCadastros.add(miPBMS);   


  
      
  
    //Adicionando itens ao menu Ajuda   
    menuAjuda.add(miAjuda);   
    menuAjuda.addSeparator();   
    menuAjuda.add(miSobre);   
  
  
  
    //adicionando menus suspensos a barra   
    barraMenu.add(menuVendas);   
    barraMenu.add(menuCadastros);   
    barraMenu.add(menuAjuda);   
  
    //adicionando barra ao menu do frame   
    setMenuBar(barraMenu);   
    addWindowListener(new CloseWindowAndExit());   
  }   
  
miProdutos.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){

System.exit(0);

}




});    
  
  static public void main (String args[]) {   
    MenuPrincipal f = new MenuPrincipal();   
    f.show();

Estou na torcida para que funcione. Se não funcionar, tentamos novamente.

M

Salve, salve!!!

o Menu está funcionando, dei uma "enxugada" nele, segue o código abaixo:

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

public class Menu extends JFrame implements ActionListener{
  JMenuBar barraMenu;
  JMenu menuCadastro, menuVendas;
  JMenuItem miVendas, miCancelamentos, miLeituraX, miProutos, miClientes;

  public static void main(String args[]) {
    JFrame Menu = new Menu();
    Menu.show(); 
  }

  public Menu () {
    setTitle("Loja Exemplo");
    setSize(1024, 780);
    setLocation(0,0);

    //adiciona a barra de menu 
    barraMenu = new JMenuBar();  

    //adiciona novos menus
    menuCadastro    = new JMenu("Cadastros"); 
    menuVendas      = new JMenu("Vendas");

    //cria itens do menu de vendas
    miVendas        = new JMenuItem ("Vendas");
    miCancelamentos = new JMenuItem ("Cancelamentos");
    miLeituraX      = new JMenuItem ("Leitura X");

    //Adicionando ActionListener
    miVendas.addActionListener(this);
    miCancelamentos.addActionListener(this);
    miLeituraX.addActionListener(this);
 
    //cria itens do menu cadastros
    miProutos = new JMenuItem ("Produtos");
    miClientes = new JMenuItem ("Clientes");
 
    //Adicionando ActionListener
    miProutos.addActionListener(this);
    miClientes.addActionListener(this);

    //adicionando itens do menu Vendas
    menuVendas.add(miVendas);
    menuVendas.add(miCancelamentos);
    menuVendas.add(miLeituraX);
   
    //adicionando itens do menu Cadastros
    menuCadastro.add(miProutos);
    menuCadastro.add(miClientes); 

    //adicionando menus suspensos a barra
    barraMenu.add(menuVendas);
    barraMenu.add(menuCadastro);
    
    //adicionando barra ao menu do frame
    setJMenuBar(barraMenu);

    addWindowListener(new CloseWindowAndExit());
  }

  public void actionPerformed(ActionEvent e) {   
    if (e.getSource()==miProutos) {   
      Produtos p = new Produtos();    
      p.show();    
    }  
  }
}

Bom, este Menu ficou funcionando da forma que eu queria mas surgiram 2 novos problemas:

1) ele permite instanciar mais de uma vez Produtos, tem como bloquear isso?
2) quando eu fecho Produtos (com System.exit(0) ), ele fecha tudo, inclusive o Menu. Queria que apenas Produtos fosse fechado.

Valeu Soruji, pela ajuda...

S

pelo que eu entendi você quer que feche apenas a janela da parte de produtos e não a aplicação inteira, certo?

Coloque essa linha abaixo do show aí me fala se de deu certo, blz?

p.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
M

Era isto mesmo que eu queria Soruji, funcionou certinho, thanks.

E para o caso de instanciar apenas uma vez o JFrame de produtos, utilizei o código abaixo:

private Produtos produtos = null;   

...

if (produtos == null) {   
  produtos = new Produtos();   
  produtos.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);   
}   
produtos.setVisible(true);
S

Que bom que deu certo, fico contente em ajudá-lo.

Só mais uma informação de extrema importancia:

Procure nesse código que vc enxugou esse trecho, e coloque essa linha final que eu coloquei

public static void main(String args[]) {   
    JFrame Menu = new Menu();   
    Menu.show();
Menu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  }

Quando você for criar um objeto JFrame (e esse for o principal), é sempre necessário você colocar essa linha. Ela fará com que seu aplicativo feche por completo quando você clicar no xizinho. Não é querendo te assustar não, mas se não tiver essa linha, seu JFrame principal vai ficar perambulando pela memória do seu pc, ou seja, ele vai consumir memória, mesmo parecendo que está fechado. rsrsrs.

Qualquer coisa, estamos aí.

Abraço.

Criado 22 de fevereiro de 2012
Ultima resposta 27 de fev. de 2012
Respostas 8
Participantes 2