2016-07-08 47 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