Autor Tema: Java crear Action Listener parabotón JButton aplicación ventanas login Eclipse  (Leído 2636 veces)

Darklord12

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Hola, necesito hacer un programa en java eclipse para dentro de unos dias, esta es la letra:

"Crear una aplicación de ventanas que se usará para permitir el ingreso a un sistema.

En la primer ventana se debe pedir que se ingrese nombre de usuario y contraseña.

Para este caso los datos pueden estar guardados en variables cargadas dentro del propio programa. Se valorará el uso de otras formas de registro de usuarios y contraseñas.

Si los datos ingresados no son correctos, el sistema informará al usuario y permitirá volver a la pantalla anterior hasta el tercer intento fallido.

En caso de ser correctos los datos se mostrará una ventana que muestre una foto del usuario, nombre, apellido y cargo; con un mensaje de bienvenida.

Tratándose de una parte de un sistema mayor, esta ventana dará la opción de reiniciar o salir del programa.

Se debe evitar que se salga del programa por errores en el ingreso de datos"


El problema que tengo es que no sé como hacer que el boton "OK" funcione, he visto tutoriales y foros pero no he entendido nada XD. El resto del ejercico parece sencillo pero si tengo una duda la pondre en este mismo foro.

Código: [Seleccionar]
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JTextPane;
import java.awt.Color;
import javax.swing.JRadioButton;
import java.awt.Font;

public class Contraseña {

private JFrame frame;
private JTextField textField;
private JTextField User;
private JPasswordField Password;
private JTextField txtContrasea;
private JTextField txtUsuario;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Contraseña window = new Contraseña();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the application.
*/
public Contraseña() {
initialize();
}

/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.getContentPane().setBackground(new Color(0, 0, 205));
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);

User = new JTextField();
User.setBounds(135, 31, 180, 20);
frame.getContentPane().add(User);
User.setColumns(10);

Password = new JPasswordField();
Password.setBounds(135, 80, 180, 20);
frame.getContentPane().add(Password);

txtContrasea = new JTextField();
txtContrasea.setText("contrase\u00F1a");
txtContrasea.setBounds(10, 80, 86, 20);
frame.getContentPane().add(txtContrasea);
txtContrasea.setColumns(10);

txtUsuario = new JTextField();
txtUsuario.setText("usuario");
txtUsuario.setBounds(10, 31, 86, 20);
frame.getContentPane().add(txtUsuario);
txtUsuario.setColumns(10);

JButton btnOk = new JButton("OK");
btnOk.setBounds(135, 182, 89, 23);
frame.getContentPane().add(btnOk);
textField = new JTextField();

String usuario="santiago";
String contraseña="1234";

String pass=new String(Password.getPassword());

if(User.getText().equals(usuario)&& pass.equals(contraseña)){

}
}
}
« Última modificación: 07 de Junio 2020, 20:01 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:botones en java
« Respuesta #1 en: 21 de Julio 2019, 22:56 »
Hola.

Tienes que crear un ActionListener para que el botón responda.

Puedes hacerlo creando una clase anidada dentro de la clase principal.

La clase que vas a crear ha de heredar de la clase ActionListener. AL heredar de esta clase, se ha implementar obligatoriamente un método llamado actionPerformed().
Dentro de este método, es donde vamos a escribir qué queremos que ocurra cuando se pulse el botón.

Aquí te pongo un ejemplo donde simplemente se muestran mensajes JOptionPane para informar si los datos de usuario y contraseña son correctos.
Ahí es donde deberías crear la otra ventana que se pide mostrar con una foto y no se que más.

Citar
   class AccionBotonOK implements ActionListener {
      @Override
      public void actionPerformed(ActionEvent e) {
         
         String pass=new String(Password.getPassword());

         if(User.getText().equals(usuario)&& pass.equals(contraseña)){
            JOptionPane.showMessageDialog(null, "Datos login aceptados",
                  "Login Usuario", JOptionPane.INFORMATION_MESSAGE);
         }
         else {
            JOptionPane.showMessageDialog(null, "Datos login rechazados",
                  "Login Usuario", JOptionPane.WARNING_MESSAGE);
         }
      }
   }

Una vez has escrito esta clase, tienes que instanciar un objeto de ella y añadírsela al botón correspondiente:

Citar
      JButton btnOk = new JButton("OK");
      btnOk.setBounds(135, 182, 89, 23);
      btnOk.addActionListener(new AccionBotonOK());
      frame.getContentPane().add(btnOk);

Así, cuando se pulse ese botón, se ejecutará el código escrito en la clase ActionListener que hemos escrito.

Te pego aquí el código completo.
He hecho un par de cambios menores. Para los textos de "Usuario" y "Contraseña" he usado dos JLabel en lugar de los JTexField.
Les he puesto fondo opaco y blanco para que se pueda ver sobre el fondo azul que pusiste.

También he cambiado el sitio donde declaras los String del nombre de usuario y contraseña correctos.
Tu los declaraste dentro del método initialize() pero ahí no servirá porque en cuanto ese método termine, esos String "morirán" junto con el método.

Los he puesto como atributo de clase, así siempre existirán mientras se esté ejecutando el programa.

También he quitado varios import que son totalmente innecesarios, al menos en el estado actual del programa.
Señalo en negrita los cambios:
Citar
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import java.awt.Color;

public class Contraseña {

   private JFrame frame;
   private JTextField User;
   private JPasswordField Password;
   private JLabel txtContrasea;
   private JLabel txtUsuario;

   //Datos login
   private String usuario="santiago";
   private String contraseña="1234";


   /**
    * Launch the application.
    */
   public static void main(String[] args) {
      EventQueue.invokeLater(new Runnable() {
         public void run() {
            try {
               Contraseña window = new Contraseña();
               window.frame.setVisible(true);
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
      });
   }

   /**
    * Create the application.
    */
   public Contraseña() {
      initialize();
   }

   /**
    * Initialize the contents of the frame.
    */
   private void initialize() {
      frame = new JFrame();
      frame.getContentPane().setBackground(new Color(0, 0, 205));
      frame.setBounds(100, 100, 450, 300);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().setLayout(null);

      User = new JTextField();
      User.setBounds(135, 31, 180, 20);
      frame.getContentPane().add(User);
      User.setColumns(10);

      Password = new JPasswordField();
      Password.setBounds(135, 80, 180, 20);
      frame.getContentPane().add(Password);

      txtContrasea = new JLabel();
      txtContrasea.setBackground(Color.WHITE);
      txtContrasea.setOpaque(true);
      txtContrasea.setText("Contrase\u00F1a");
      txtContrasea.setBounds(10, 80, 86, 20);
      frame.getContentPane().add(txtContrasea);

      txtUsuario = new JLabel();
      txtUsuario.setBackground(Color.WHITE);
      txtUsuario.setOpaque(true);
      txtUsuario.setText("Usuario");
      txtUsuario.setBounds(10, 31, 86, 20);
      frame.getContentPane().add(txtUsuario);

      JButton btnOk = new JButton("OK");
      btnOk.setBounds(135, 182, 89, 23);
      btnOk.addActionListener(new AccionBotonOK());
      frame.getContentPane().add(btnOk);

   }
   
   /*
    * Aquí programamos lo que queremos que ocurra cuando se
    * pulse el boton OK
    */

   class AccionBotonOK implements ActionListener {
      @Override
      public void actionPerformed(ActionEvent e) {
         
         String pass=new String(Password.getPassword());

         if(User.getText().equals(usuario)&& pass.equals(contraseña)){
            JOptionPane.showMessageDialog(null, "Datos login aceptados",
                  "Login Usuario", JOptionPane.INFORMATION_MESSAGE);
         }
         else {
            JOptionPane.showMessageDialog(null, "Datos login rechazados",
                  "Login Usuario", JOptionPane.WARNING_MESSAGE);
         }
      }

   }
}
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".