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!