Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Noxware en 25 Agosto 2014, 18:23 pm



Título: [AYUDA] Ayuda con botones en Java (soy nuevo en java)...
Publicado por: Noxware en 25 Agosto 2014, 18:23 pm
Hola, soy nuevo en la programacion en Java... lo q sucede es q recien ayer aprendi a usar "swing" para hacer mis interfaces graficas... el problema es q cuando creo un boton, para darle un funcion por lo q lei tengo q pasarle una clase como argumento...

pero necesito q ese boton modifique variables q estan en la clase "main" pero no puedo modificar esos valores desde la clase del boton.... hay alguna forma de modificar esos valores sin hacerlos estaticos??? o alguna forma de q un boton tenga una funcion sin tener q pasarle una clase como argumento??? no se si me explico bien porque soy un novato en Java.... personalmente no me gusta Java ya q la complica demasiado pero tengo q entregar un proyecto y ese proyecto tiene q estar programado en Java.... gracias y espero su ayuda


Título: Re: [AYUDA] Ayuda con botones en Java (soy nuevo en java)...
Publicado por: l3ad Programmer en 25 Agosto 2014, 20:42 pm
Tu proyecto por lo visto está mal estructurado. En la clase main no tienes que tener código. Los códigos deben estar en sus respectivas clases y tales clases tienen que tener un objetivo. En el método main, en una aplicación Swing, solo debería instanciarse la clase que representa a la interfáz gráfica y ejecutarla.

Cuando trabajas con interfaces gráficas, siempre es convenible utilizar el patrón de diseño Modelo - Vista - Controlador (MVC). De ésta manera delegas responsablidades de forma ordenada y eficiente.

Cita de: francoyo1998
alguna forma de q un boton tenga una funcion sin tener q pasarle una clase como argumento?

En Swing hay dos formas de usar eventos: Por medio de clases internas y por implementación de la interfaz ActionListener que es la proveedora de eventos para controles.

Código
  1. JButton btnSay = new JButton("Saluda!");
  2. btnSay.addActionListener( new ActionListener() {
  3. @Override
  4. public void actionPerformed(ActionEvent e) {
  5. JOptionPane.showMessageDialog(null, "Hola!");
  6. }
  7. });

La otra forma es implementarlo la interfaz ActionListener:

Código
  1. public class MyGUI extends JFrame implements ActionListener {
  2.  
  3. // metodos que se implementaran
  4. @Override
  5. public void actionPerformed(ActionEvent e) {
  6. JOptionPane.showMessageDialog(null, "Hola!");
  7. }
  8.  
  9. @Override
  10. public void keyPressed(KeyEvent e) {
  11. // codigo que quieres que haga
  12. }
  13.  
  14. // y otros mas...
  15.  
  16. public MyGUI() {
  17.        super("ActionListener");
  18. this.setSize(400,400);
  19. this.setResizable(false);
  20. FlowLayout fl = new FlowLayout();
  21. // registra el listener al boton
  22. JButton btnSayHello = new JButton("Greet!");
  23. btnSayHello.addActionListener(this);
  24. fl.add(btnSayHello);
  25. this.add(fl);
  26. this.setVisible(true);
  27. }
  28. }

[-] Ejemplo MVC:

[-] Paquete net.badprogrammer.events.view

Código
  1. public class MyGUI extends JFrame {
  2.  
  3. // le pasamos por parametro la referencia de la clase MyGUI
  4. private static final MyGUIController controller = new MyGUIController(this);
  5.  
  6. public MyGUI() {
  7. this.setSize(400,400);
  8. this.setResizable(false);
  9. FlowLayout fl = new FlowLayout();
  10. // registra el listener al boton
  11. JButton btnSayHello = new JButton("Greet!");
  12. btnSayHello.addActionListener(controller);
  13. fl.add(btnSayHello);
  14. this.add(fl);
  15. this.setVisible(true);
  16. }

[-] Paquete net.badprogrammer.events.model: Aquí irá tu lógica de negocio.


[-] Paquete net.badprogrammer.events.controller: Aquí irán las clases que controlarán las vistas y las clases del model:

Código
  1. public class MyGUIController implements ActionListener {
  2.  
  3. private MyGUI gui;
  4.  
  5. public MyGUIController(MyGUI gui) {
  6. this.gui = gui;
  7. }
  8.  
  9. @Override
  10. public void actionPerformed(ActionEvent event) {
  11. if (event.getActionCommand().equals("btnSayHello")) {
  12. JOptionPane.showMessageDialog(null, "Hola amigo!");
  13. }
  14. if (event.getActionCommand().equals("btnExit")) {
  15. JOptionPane.showMessageDialog(null, "Adiós amigo!");
  16. System.exit(0);
  17. }
  18. }
  19.  
  20. // los otros metodos implementados por ActionListener
  21.  
  22. }

Nota: En el paquete net.badprogrammer.model van a ir tus clases de tu lógica de negocio, es decir las clases que requieren mayor encapsulasión, que pueden ser clases que representen a usuarios, productos, etc. Éstas clases también deben ser accedidas solo por el Controlador.

Espero hayas comprendido. Saludos.


Título: Re: [AYUDA] Ayuda con botones en Java (soy nuevo en java)...
Publicado por: LaThortilla (Effort) en 10 Octubre 2014, 20:19 pm
Tu proyecto por lo visto está mal estructurado. En la clase main no tienes que tener código. Los códigos deben estar en sus respectivas clases y tales clases tienen que tener un objetivo. En el método main, en una aplicación Swing, solo debería instanciarse la clase que representa a la interfáz gráfica y ejecutarla.

Cuando trabajas con interfaces gráficas, siempre es convenible utilizar el patrón de diseño Modelo - Vista - Controlador (MVC). De ésta manera delegas responsablidades de forma ordenada y eficiente.


Nota: En el paquete net.badprogrammer.model van a ir tus clases de tu lógica de negocio, es decir las clases que requieren mayor encapsulasión, que pueden ser clases que representen a usuarios, productos, etc. Éstas clases también deben ser accedidas solo por el Controlador.

Espero hayas comprendido. Saludos.
Amigo algun libro que hable sobre  MVC aplicado a java porfavor ...... Porfa