elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Diferentes formas de manejar eventos en java.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Diferentes formas de manejar eventos en java.  (Leído 2,070 veces)
NextByte

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Diferentes formas de manejar eventos en java.
« en: 25 Marzo 2019, 00:07 am »

Buenas a todos , tenía la curiosidad sobre saber cual era su forma de organizar las clases destinadas a las interfaces gráficas y en especifico como administraban el objeto que respondía a los eventos.

Actualmente he visto 2 formas muy particulares de hacerlo y que las mostrare con un ejemplo sencillo que tiene 3 botones, cada botón hace referencia a un color y cuando se da clic en alguno de ellos simplemente el panel se pinta de dicho color.

1ra Forma. El panel al ser el objeto que va ser afectado por el evento es el que implementa la interfaz ActionListener.

Código
  1. import java.awt.*;
  2. import java.awt.Color;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5.  
  6. public class Manejo{
  7.    public static void main(String[] args) {
  8.        Ventana v1 = new Ventana(new Dimension(400,400));
  9.        v1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  10.    }
  11.  
  12.  
  13. }
  14.  
  15.  
  16. class Ventana extends JFrame{
  17.    Lamina l1;
  18.    public Ventana(Dimension d){
  19.        setSize(d);
  20.        l1 = new Lamina();
  21.        add(l1);
  22.        setVisible(true);
  23.    }
  24.  
  25.  
  26. }
  27.  
  28. class Lamina extends JPanel implements ActionListener{
  29.    private JButton verde;
  30.    private JButton azul;
  31.    private JButton amarillo;
  32.    private Color fondo;
  33.  
  34.    public Lamina(){
  35.        verde = new JButton("Color verde");
  36.        azul = new JButton("Color azul");
  37.        amarillo = new JButton("Color amarillo");
  38.  
  39.        verde.addActionListener(this);
  40.        azul.addActionListener(this);
  41.        amarillo.addActionListener(this);
  42.        add(verde);
  43.        add(azul);
  44.        add(amarillo);
  45.    }
  46.  
  47.    @Override
  48.    public void actionPerformed(ActionEvent e){
  49.        Object fuente = e.getSource();
  50.  
  51.        if(fuente  == verde){
  52.            fondo = Color.GREEN;
  53.            setBackground(fondo);
  54.  
  55.        }else if( fuente == azul){
  56.            fondo = Color.BLUE;
  57.            setBackground(fondo);
  58.  
  59.        }else{
  60.            fondo = Color.YELLOW;
  61.            setBackground(fondo);
  62.  
  63.        }
  64.    }
  65.  
  66. }

2da Forma. Se crea una clase anidada que controla el evento e implementa la interfaz actionListener .

Código
  1. import java.awt.*;
  2. import java.awt.Color;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5.  
  6. public class Manejo{
  7.    public static void main(String[] args) {
  8.        Ventana v1 = new Ventana(new Dimension(400,400));
  9.        v1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  10.    }  
  11. }
  12.  
  13.  
  14. class Ventana extends JFrame{
  15.    Lamina l1;
  16.    public Ventana(Dimension d){
  17.        setSize(d);
  18.        l1 = new Lamina();
  19.        add(l1);
  20.        setVisible(true);
  21.    }
  22.  
  23.  
  24. }
  25.  
  26. class Lamina extends JPanel {
  27.    private JButton verde;
  28.    private JButton azul;
  29.    private JButton amarillo;
  30.    private Color fondo;
  31.  
  32.    public Lamina(){
  33.        verde = new JButton("Color verde");
  34.        azul = new JButton("Color azul");
  35.        amarillo = new JButton("Color amarillo");
  36.  
  37.        verde.addActionListener(new ColorFondo(Color.GREEN));
  38.        azul.addActionListener(new ColorFondo(Color.BLUE));
  39.        amarillo.addActionListener(new ColorFondo(Color.YELLOW));
  40.  
  41.        add(verde);
  42.        add(azul);
  43.        add(amarillo);
  44.    }
  45.  
  46.  
  47.    private class ColorFondo implements ActionListener{
  48.        private Color c;
  49.  
  50.        public ColorFondo(Color c){
  51.            this.c = c;
  52.        }
  53.  
  54.        @Override
  55.        public void actionPerformed(ActionEvent e){
  56.            setBackground(c);
  57.        }
  58.  
  59.    }
  60.  
  61. }
  62.  


A partir de las anteriores formas de dar solución al problema me causa la incógnita el saber cual podría ser la mejor forma de hacerlo, personalmente no encuentro mucha diferencia para inclinarme hacia un lado pero me gustaría saber si alguien pudiera compartir su experiencia y explicar cual prefiere y la razón del por que.




« Última modificación: 25 Marzo 2019, 00:10 am por NextByte » En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Diferentes formas de manejar eventos en java.
« Respuesta #1 en: 25 Marzo 2019, 00:12 am »

otra es por medio de clases internas anónimas, para no llenar tu clase con implementacion de interfaces

Ejemplo con una expresión lambda, mínimo java 8 debes tener.

Código
  1. final JButton button = new JButton("Click Me!");
  2. button.addActionListener(e -> {
  3. JOptionPane.showMessageDialog(null,"Click");
  4. });
  5.  


En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
NextByte

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Re: Diferentes formas de manejar eventos en java.
« Respuesta #2 en: 25 Marzo 2019, 00:15 am »

otra es por medio de clases internas anónimas, para no llenar tu clase con implementacion de interfaces

Ejemplo con una expresión lambda, mínimo java 8 debes tener.

Código
  1. final JButton button = new JButton("Click Me!");
  2. button.addActionListener(e -> {
  3. JOptionPane.showMessageDialog(null,"Click");
  4. });
  5.  

Ya veo , parece ser una forma muy limpia de hacerlo, aún no he tocado el tema de las expresiones lambda pero veo que es muy similar a la forma en que se hace esta tarea en javascript.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Diferentes formas de vender Software?
Foro Libre
Senior++ 1 2,817 Último mensaje 1 Marzo 2012, 19:07 pm
por Bud4
Manejo eventos en Java.
Java
konarr 1 2,230 Último mensaje 6 Octubre 2012, 23:28 pm
por konarr
Diferentes formas de arrancar Windows 10 en modo seguro
Noticias
wolfbcn 0 2,814 Último mensaje 4 Mayo 2017, 21:41 pm
por wolfbcn
10 formas diferentes de saltarse el bloqueo de una página web
Noticias
wolfbcn 0 1,174 Último mensaje 31 Enero 2019, 02:21 am
por wolfbcn
5 formas diferentes de ganar dinero en Twitch
Noticias
wolfbcn 0 1,237 Último mensaje 1 Julio 2019, 21:30 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines