[AYUDA] Ayuda con botones en Java (soy nuevo en java)...

Iniciado por Noxware, 25 Agosto 2014, 18:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Noxware

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
"La mejor forma de conocer a una persona es viendo su código... o en una partida de ajedrez...

PD: Si no tengo faltas de ortografía es porque use el autocorrector."

l3ad Programmer

#1
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: 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.

LaThortilla (Effort)

Cita de: 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.


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