简体   繁体   中英

Showing JButtons after login in JFrame

I just getting started in Java, and I'm developing an applet wich after the login shows me certains JButtons. My problem is that I don't know to use the actionListener. Heres's the code:

 public class Menu extends JFrame { private JTextField f_usuario; private JPasswordField f_pass; private JList lista_libros; private JButton b_ingreso; private Usuario[] usuarios = new Usuario[5]; private Libro[] libros = new Libro[20]; private Object JPanel; public static void main(String args[]) { Menu application = new Menu(); //inicializa los usuarios application.usuarios[0] = new Usuario("admin", "admin", true); application.usuarios[1] = new Usuario("usuario1", "123", false); application.usuarios[2] = new Usuario("usuario2", "123", false); application.usuarios[3] = new Usuario("usuario3", "123", false); application.usuarios[4] = new Usuario("usuario4", "123", false); application.libros[0] = new Libro(1, "Igna", "Vicio", true, ""); application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public Menu() { super("Menu"); final boolean f = true; JLabel e_usuario = new JLabel("Usuario"); JLabel e_pass = new JLabel("Pass"); JButton b_ingreso = new JButton("Entrar"); JList lista_libros = new JList(); b_ingreso.addActionListener( new ActionListener() { public boolean b; public void actionPerformed(ActionEvent evento) { validar(); } } ); f_usuario = new JTextField(15); f_pass = new JPasswordField(15); JScrollPane lista = new JScrollPane(); lista_libros = new JList(libros); lista_libros.setVisibleRowCount(5); lista_libros.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); lista.add(lista_libros); JPanel ingreso = new JPanel(); ingreso.add(e_usuario); ingreso.add(f_usuario); ingreso.add(e_pass); ingreso.add(f_pass); ingreso.add(b_ingreso); JPanel handler = new JPanel(); handler.add(new JScrollPane(lista_libros)); Container contenedor = getContentPane(); contenedor.setLayout(new FlowLayout()); contenedor.add(ingreso); //if(b) JOptionPane.showMessageDialog(this, ""); Container contenedor1 = getContentPane(); contenedor.add(lista); setSize(400, 250); setVisible(true); } private boolean validar() { int i; boolean f = false; String pass = new String(f_pass.getPassword()); if (f_usuario.getText().equals("") || pass.equals("")) { JOptionPane.showMessageDialog(this, "Por favor complete todos los campos"); } for (i = 0; i < 5; i++) { if (f_usuario.getText().equals(usuarios[i].getUsuario()) && pass.equals(usuarios[i].getPass())) { f = true; } } if (f) { JOptionPane.showMessageDialog(this, "Logueo exitoso"); } else { JOptionPane.showMessageDialog(this, "La combinación de usuario y contraseña no existe"); } return (true); } }

If I use an "If" it says that it's not posible, so how should I recode my program to let validar() show the buttons I'll add later. For example if validar() = true, I want to make visible a JButton that allows me to list the books of a library. Maybe it's a little confusing, so any questions and ansewrs will help. Thanks!

Code Usuario:

 class Usuario { private String usuario; private String pass; private boolean admin; // constructor public Usuario(String usuario, String pass, boolean admin) { this.usuario = usuario; this.pass = pass; this.admin = admin; } // getter public String getUsuario() { return usuario; } public String getPass() { return pass; } public boolean getAdmin() { return admin; } // setter public void setUsuario(String usuario) { this.usuario = usuario; } public void setPass(String pass) { this.pass = pass; } public void setAdmin(Boolean admin) {this.admin = admin;} }

Code Libro:

 class Libro { private int numero_id; private String titulo; private String autor; private boolean reservado; private String nombre_usuario_reserva; // constructor public Libro(int numero_id, String titulo, String autor, boolean reservado, String nombre_usuario_reserva) { this.numero_id = numero_id; this.titulo = titulo; this.autor = autor; this.reservado = reservado; this.nombre_usuario_reserva = nombre_usuario_reserva; } // getter public int getNumero_id() { return numero_id; } public String getTitulo() { return titulo; } public String getAutor() { return autor; } public boolean getReservado() { return reservado; } public String getNombre_usuario_reserva() {return nombre_usuario_reserva;} // setter public void setNumero_id() { this.numero_id = numero_id; } public void setTitulo() { this.titulo = titulo; } public void setAutor() { this.autor = autor; } public void setReservado() { this.reservado = reservado; } public void setNombre_usuario_reserva() {this.nombre_usuario_reserva = nombre_usuario_reserva;} }

The only problem I found was a missing semicolon at the end of addActionListener .

b_ingreso.addActionListener(new ActionListener() {
    public boolean b;

    public void actionPerformed(ActionEvent evento) {
        if(validar() == true){ // possible to use if here
           // show buttons if true    
        } else {
           // show something else if false    
        }
    }
}); // missing semicolon

But I need to warn you that your validar() method will always return true , take a look at the last line:

private boolean validar() {
    int i;
    boolean f = false;
    String pass = new String(f_pass.getPassword());
    if (f_usuario.getText().equals("") || pass.equals(""))
        JOptionPane.showMessageDialog(this, "Por favor complete todos los campos");

    for (i = 0; i < 5; i++) {
        if (f_usuario.getText().equals(usuarios[i].getUsuario()) && pass.equals(usuarios[i].getPass()))
            f = true;
    }

    if (f)
        JOptionPane.showMessageDialog(this, "Logueo exitoso");
    else
        JOptionPane.showMessageDialog(this, "La combinación de usuario y contraseña no existe");
    return (true); // always return true
}

As validar() is always returning true , the validar() == false block on actionPerformed will never execute.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM