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.
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.
La otra forma es implementarlo la interfaz ActionListener:
[-] Ejemplo MVC:
[-] Paquete net.badprogrammer.events.view
[-] 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:
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.
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: francoyo1998alguna 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 (=java) [Seleccionar]
JButton btnSay = new JButton("Saluda!");
btnSay.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "Hola!");
}
});
La otra forma es implementarlo la interfaz ActionListener:
Código (=java) [Seleccionar]
public class MyGUI extends JFrame implements ActionListener {
// metodos que se implementaran
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "Hola!");
}
@Override
public void keyPressed(KeyEvent e) {
// codigo que quieres que haga
}
// y otros mas...
public MyGUI() {
super("ActionListener");
this.setSize(400,400);
this.setResizable(false);
FlowLayout fl = new FlowLayout();
// registra el listener al boton
JButton btnSayHello = new JButton("Greet!");
btnSayHello.addActionListener(this);
fl.add(btnSayHello);
this.add(fl);
this.setVisible(true);
}
}
[-] Ejemplo MVC:
[-] Paquete net.badprogrammer.events.view
Código (=java) [Seleccionar]
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);
FlowLayout fl = new FlowLayout();
// registra el listener al boton
JButton btnSayHello = new JButton("Greet!");
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:
Código (=java) [Seleccionar]
public class MyGUIController implements ActionListener {
private MyGUI gui;
public MyGUIController(MyGUI gui) {
this.gui = gui;
}
@Override
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("btnSayHello")) {
JOptionPane.showMessageDialog(null, "Hola amigo!");
}
if (event.getActionCommand().equals("btnExit")) {
JOptionPane.showMessageDialog(null, "Adiós amigo!");
System.exit(0);
}
}
// 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.