在 JFrame 中登录后显示 JButtons

Showing JButtons after login in JFrame

我刚开始使用 Java,我正在开发一个小程序,在登录后显示某些 JButtons。我的问题是我不知道使用 actionListener。 这是代码:

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" 它说这是不可能的,那么我应该如何重新编码我的程序才能让 validar() 显示我稍后添加的按钮。例如,如果 validar() = true,我想让一个允许我列出图书馆书籍的 JButton 可见。 也许这有点令人困惑,所以任何问题和答案都会有所帮助。谢谢!

代码 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;}
    }

代码库:

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

我发现的唯一问题是 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

但是我需要警告你,你的validar()方法总是returntrue,看看最后一行:

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
}

由于 validar() 总是 returning trueactionPerformed 上的 validar() == false 块永远不会执行。