2016-07-08 45 views
1

我刚刚开始使用Java,并且在登录后显示某些JButton时我正在开发一个小程序。我的问题是,我不知道使用actionListener。 继承人的代码:在JFrame中登录后显示JButton

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

如果我使用“如果”它说,它不是更多钞票,所以我应该如何重新编写我的程序,让validar()显示的按钮我会稍后添加。例如,如果validar()= true,我想让可见的JButton允许我列出库的书籍。 也许这有点令人困惑,所以任何问题和ansewrs都会有所帮助。谢谢!

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

+0

你能分享更多的代码,如Usuario&Libro吗? – Sknecht

+0

当然,我在主要文章@Sknecht – frusciante

+0

@frusciante中添加了@frusciante我将所有类都添加到了netbeans中的新项目中以运行您的代码,并且我添加了if和else'actionPerformed'并且它没有任何错误地工作。 –

回答

0

我发现了在t缺少分号唯一的问题他结束了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()方法将总是返回true,看看最后一行:上actionPerformed

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()总是返回true,该validar() == false块将从不执行。

+0

真棒@durban!我不知道什么是错,但现在它工作。非常感谢 – frusciante