Java - Usuarios con diferentes acciones posibles

 
Vista:
sin imagen de perfil
Val: 40
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Usuarios con diferentes acciones posibles

Publicado por Fran (13 intervenciones) el 14/04/2021 08:18:47
Hola a [email protected]!

Ojalá y me puedan ayudar con esta duda. ¿Cómo puedo hacer para que al loguear un usuario en el programa que estoy haciendo le otorgue diferentes acciones o se activen diferentes botones?

Pego un poco de código a ver si me explico mejor:

Esto es en el main, en el que activo o desactivo algunos botones para un usuario standard:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private class ValidateAction implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        /**
         * This action makes JDialog checks
         * if the data inputted are valid
         * to login the user.
         * If positive, Login and New User
         * botton will be deactivated and
         * Logout will be activated.
         * And JDialog will be closed.
         */
        if(dlgLogin.Validated())
        {
            btLogin.setEnabled(false);
            btNewUser.setEnabled(false);
            btLougout.setEnabled(true);
            dlgLogin.dispose();
        }
    }
}

Y el siguiente trozo de código es del cuadro de diálogo, en el que se checkea si el usuario está registrado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public boolean Validated()
{
    //Retrieve entered data
    String name = jtName.getText();
    String pass = jtPass.getText();
    //Check that they are not empty
    if(name.isBlank())
    {
        JOptionPane.showMessageDialog(null, "Name cannot be empty", "Validate data",
                JOptionPane.WARNING_MESSAGE);
        return false;
    }
    else if(pass.isBlank())
    {
        JOptionPane.showMessageDialog(null, "Password cannot be empty", "Validate data",
                JOptionPane.WARNING_MESSAGE);
        return false;
    }
    else
    {
        //Check if there is a user with that data in the arraylist
        User checker = new User(name, pass);
        for(User usu : users)
        {
            if(usu.equals(checker))
                return true; //User found
        }
        //If the for loop has not returned true, there is no user with that data
        JOptionPane.showMessageDialog(null, "There is no user with this data", "Validate data",
                JOptionPane.INFORMATION_MESSAGE);
        return false;
    }
}

La duda es cómo podría diferenciar que ese usuario encontrado es, por ejemplo, un administrador o un usuario normal?

Pensaba que en lugar de utilizar sólo una clase 'User", utilizar una clase "Admin" otra "estudiantes" y las que sean que hagan falta, pero claro, el método retorna un boolean, no lo privilegios de usuario.

Muchas gracias de antemano por toda vuestra ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Joel
Val: 2.649
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Usuarios con diferentes acciones posibles

Publicado por Billy Joel (780 intervenciones) el 14/04/2021 16:22:32
Sería agregar una propiedad a tu clase User, la podríamos como "type". Ahí vas a definir si el usuario es "administrador" o "estudiante" y teniendo en cuenta eso entonces habilitas los botones que necesitas.

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 40
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Usuarios con diferentes acciones posibles

Publicado por Fran (13 intervenciones) el 14/04/2021 18:10:18
Muchas gracias Billy Joel por tu respuesta, pero no termino de entenderlo. Una propieda como "String type"? Si la función devuelve un boolean y es en el main dónde activo y desactivo los botones, cómo puedo diferenciar el tipo de usuario?

Muchas gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.649
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Usuarios con diferentes acciones posibles

Publicado por Billy Joel (780 intervenciones) el 14/04/2021 18:15:46
Sube tu clase User y te explico
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 40
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Usuarios con diferentes acciones posibles

Publicado por Fran (13 intervenciones) el 14/04/2021 18:18:49
Gracias
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class User
{
    private String name;
    private String password;
 
    public User(String name, String password)
    {
        this.name = name;
        this.password = password;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    @Override
    public boolean equals(Object user)
    {
        if(user instanceof User)
        {
            User newUser = (User) user;
            return (name.equals(newUser.name) && password.equals(newUser.password));
        }
        else
            return false;
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.649
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Usuarios con diferentes acciones posibles

Publicado por Billy Joel (780 intervenciones) el 14/04/2021 18:44:52
Ok tu clase User debería quedar así.
Le agregué la propiedad type (con sus set y get). También sobrecargué el constructor de la clase para no impactar (para mal) tu código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class User {
 
    private String name;
    private String password;
    private String type;
 
    public User(String name, String password) {
        this.name = name;
        this.password = password;
        type = "Estudiante";
    }
 
    public User(String name, String password, String type) {
        this.name = name;
        this.password = password;
        this.type = type;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    @Override
    public boolean equals(Object user) {
        if (user instanceof User) {
            User newUser = (User) user;
            return (name.equals(newUser.name) && password.equals(newUser.password) && type.equals(newUser.type));
        } else {
            return false;
        }
    }
 
    /**
     * @return the type
     */
    public String getType() {
        return type;
    }
 
    /**
     * @param type the type to set
     */
    public void setType(String type) {
        this.type = type;
    }
}

Veo que tienes una línea así
1
for(User usu : users)
De aquí concluyo que manejas un arreglo o lista de users. Bueno ahí donde generas esa lista de usuarios podrías agregarle el type en el momento de la creación o después de la creación a traves del setType.

Podrías subir esa parte donde cargas los usuarios?

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 40
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Usuarios con diferentes acciones posibles

Publicado por Fran (13 intervenciones) el 14/04/2021 19:18:54
De nuevo muchas gracias por tu dedicación:

Los nuevos usuarios los voy agregando desde este JDialog:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
public class CreateUserDialog extends JDialog
{
    private ArrayList<User> users;
    private JTextField jtName;
    private JTextField jtPass;
    private JButton btCreate;
 
    public CreateUserDialog(Frame Main, boolean modal, ArrayList<User> users, ActionListener CreateAction)
    {
        super(Main, modal);
        this.users = users;
 
        jtName = new JTextField(8);
        jtPass = new JTextField(8);
        btCreate = new JButton("Create User");
        btCreate.addActionListener(CreateAction);
 
        JPanel pn1 = new JPanel();
        pn1.add(new JLabel("Enter new user data"));
        JPanel pn2 = new JPanel();
        pn2.setLayout(new FlowLayout(FlowLayout.RIGHT));
        pn2.add(new JLabel("Name: "));
        pn2.add(jtName);
        JPanel pn3 = new JPanel();
        pn3.setLayout(new FlowLayout(FlowLayout.RIGHT));
        pn3.add(new JLabel("Password: "));
        pn3.add(jtPass);
        JPanel pn4 = new JPanel();
        pn4.add(btCreate);
 
        JPanel pnMain = new JPanel();
 
        pnMain.setLayout(new BoxLayout(pnMain, BoxLayout.Y_AXIS));
        pnMain.add(pn1);
        pnMain.add(pn2);
        pnMain.add(pn3);
        pnMain.add(pn4);
        pnMain.setBorder(BorderFactory.createEmptyBorder(25, 25, 25, 25));
 
        setContentPane(pnMain);
 
        setTitle("Create New User");
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
    }
 
    public boolean Created()
    {
       //Retrieve entered data
        String name = jtName.getText();
        String pass = jtPass.getText();
        //Check that they are not empty
        if(name.isBlank())
        {
            JOptionPane.showMessageDialog(null, "Name cannot be empty", "Create New User",
                    JOptionPane.WARNING_MESSAGE);
            return false;
        }
        else if(pass.isBlank())
        {
            JOptionPane.showMessageDialog(null, "Password cannot be empty", "Create New User",
                    JOptionPane.WARNING_MESSAGE);
            return false;
        }
        else
        {
            //Check if there is a user with that data in the arraylist
            User checker = new User(name, pass);
            for(User usu : users)
            {
                if(usu.equals(checker))
                {
                    JOptionPane.showMessageDialog(null, "There is a user with this data", "Create New User",
                    JOptionPane.INFORMATION_MESSAGE);
                    return false; //User found
                }
 
            }
            users.add(new User(name, pass));
            JOptionPane.showMessageDialog(null, "New User created successfully!", "Create New User",
                    JOptionPane.INFORMATION_MESSAGE);
 
            return true;
        }
    }
 
}

Espero que sea esto a lo que te refieres.

Muchas grcias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.649
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Usuarios con diferentes acciones posibles

Publicado por Billy Joel (780 intervenciones) el 14/04/2021 19:30:26
En ese mismo lugar puedes añadir un combobox, checkbox, texto, etc... para definir si el nuevo usuario es "administrador" o "estudiante"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 40
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Usuarios con diferentes acciones posibles

Publicado por Fran (13 intervenciones) el 14/04/2021 19:37:11
Creo que te entendí bien. En ello estoy ahora mismo. Estoy añadiendo dos JRadioBotton y según el que esté seleccionado pues registrará en tipo de usuario. Y luego a la hora del login se pregunta también y de esa manera funciona el código que creaste para el programa.

Muchas gracias de nuevo Billy Joel!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar