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.
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.
@Override
}
});
La otra forma es implementarlo la interfaz ActionListener:
// metodos que se implementaran
@Override
}
@Override
// codigo que quieres que haga
}
// y otros mas...
public MyGUI() {
super("ActionListener");
this.setSize(400,400);
this.setResizable(false);
// registra el listener al boton
btnSayHello.addActionListener(this);
fl.add(btnSayHello);
this.add(fl);
this.setVisible(true);
}
}
[-] Ejemplo MVC:
[-] Paquete net.badprogrammer.events.view
public class MyGUI
extends JFrame {
// le pasamos por parametro la referencia de la clase MyGUI
private static final MyGUIController controller = new MyGUIController(this);
public MyGUI() {
this.setSize(400,400);
this.setResizable(false);
// registra el listener al boton
btnSayHello.addActionListener(controller);
fl.add(btnSayHello);
this.add(fl);
this.setVisible(true);
}
[-] 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:
private MyGUI gui;
public MyGUIController(MyGUI gui) {
this.gui = gui;
}
@Override
if (event.getActionCommand().equals("btnSayHello")) {
}
if (event.getActionCommand().equals("btnExit")) {
JOptionPane.
showMessageDialog(null,
"Adiós amigo!"); }
}
// los otros metodos implementados por ActionListener
}
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.