I just getting started in Java, and I'm developing an applet which after the login shows me certain JButtons. My problem is that I don't know to use the actionListener. Here'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 possible, 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 answers 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.