varios JButton que ejecuten un único método

Iniciado por Gabilitron, 23 Febrero 2012, 02:33 AM

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

Gabilitron

Buenas, mi propósito es crear un tablero, del estilo del juego del ajedrez.
Estoy utilizando Eclipse, y la clase JFrame del paquete Window Builder.
Dejando la programación del código aparte, el objetivo es conseguir ejecutar un método cuando el usuario pulse una casilla de dicho tablero. Para ello he creado un tablero en el que cada casilla es un JButton (casi no conozco el entorno gráfico, así que no conozco mejores opciones para conseguir lo que busco).

Precisamente por eso utilizo la clase JFrame en su modo de diseño, para no tener que escribir todo ese código. Lo que sé hacer es conseguir que al pulsar un botón se escriba texto en una caja de texto, o que se ejecute un método de cualquier otra clase. Para ello, solo escribo el código dentro de esta estructura, siendo A1 el nombre del botón.
CitarJButton A1 = new JButton("T");
      A1.setAction(action);
      A1.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
// Aquí dentro puedo llamar a un método
         }
El problema es que tengo muchas casillas, y no voy a escribir el código dentro de cada una de ellas.
Es más, quiero conseguir que al pulsar cualquiera de los botones se ejecute un único método, que será el mismo para todos. Esa es mi pregunta, seguro que hay alguna opción en el modo diseño que permite hacerlo, y además me suena haberlo hecho en visual basic.
Aunque parezca una tontería que todos botones tengan el mismo efecto, pensando en un tablero de juego, solo me interesa saber cuál de los botones está pulsando el usuario para poder ejecutar un método al que le pasaré el nombre del botón pulsado.
Ya digo que es solo un experimento que estoy haciendo, nada serio. Con lo cual, es posible que el asunto tenga mucha más miga que la que llego a ver, o, que me esté complicando la vida. De todas formas no tengo demasiados recursos todavía en el mundo de la programación y tiro por los que sé.

Así que desde aquí, muchas gracias, y cualquier respuesta será bienvenida.

RyogiShiki

lo mejor en este caso es crear un array de botones y con un for asígnarles un actioncommand, para que cuando se produzca la cción sea la misma para todos:

Código (java) [Seleccionar]
public class ButtonArray implements ActionListener{
private JButton buttons[] = new JButton[10];
        /*... mas codigo que opere con los botones */
private void initButtons() {
for (JButton b : buttons) {
                        /*... mas codigo que opere con los botones */
b.setActionCommand("action")
}
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("action"))) {
methodToExecute();
}
}
}


Pero entonces has de revisar muy bien el tema de los Listeners, y estudiar un poco sobre Swing.

Saludos


Gabilitron

Pues sí, me miraré lo que dices, porque así en principio no tengo ni idea. No conozco casi el JFrame y solo lo he utilizado en el modo gráfico. Osea, que no sé nada del código que autogenera.
Gracias.

RyogiShiki

Y el código que autogenera tampoco lo vas a entender de a mucho, porquee stos builders generan código muy denso pesado, sucio e innecesario.

Saludos


Proteus1989

Puedes crearte una clase que implementa ActionListener y llamar siempre a la misma.

Código (java) [Seleccionar]

class AccionBotones implements ActionListener{
    private TuClasePrincipal clase;
    public AccionBotones(TuClasePrincipal clase){
        this.clase=clase;
    }
    public void actionPerformed(ActionEvent ev){
       //Codigo
    }
}


Para llamarla
Código (java) [Seleccionar]

AccionBotones accion = new AccionBotones(this)
boton.addActionListener(accion)

visualfree

Aca te hice un ejemplo espero te sirva...

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class Prueba{
public static void main(String[] args)
{
Ventana v=new Ventana();
v.setVisible(true);
}
}
class Ventana extends JFrame{
public Ventana()
{
this.setTitle("Tablero");
this.setSize(200,200);
Tablero tablero=new Tablero();
add(tablero);
}

}
class Tablero extends JPanel{
private JButton btn1=new JButton("1");
private JButton btn2=new JButton("2");
private JButton btn3=new JButton("3");
private JButton btn4=new JButton("4");
public Tablero()
{
this.setLayout(new GridLayout(2,2));
this.add(btn1);this.add(btn2);
this.add(btn3);this.add(btn4);
OyenteBoton oBoton=new OyenteBoton();
btn1.addActionListener(oBoton);
btn2.addActionListener(oBoton);
btn3.addActionListener(oBoton);
btn4.addActionListener(oBoton);
}
class OyenteBoton implements ActionListener{
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("1"))
{
System.out.println("Usted presiono el Boton 1");
}else if(e.getActionCommand().equals("2"))
{
System.out.println("Usted Presiono el Boton 2");
}else if(e.getActionCommand().equals("3"))
{
System.out.println("Usted Presiono el Boton 3");
}else if(e.getActionCommand().equals("4"))
{
System.out.println("Usted Presiono el Boton 4");
}
}
}
}