Foros del Web » Programación para mayores de 30 ;) » Java »

-ayuda-problema con matriz de botones

Estas en el tema de -ayuda-problema con matriz de botones en el foro de Java en Foros del Web. Hola a todos! En un programa que estoy haciendo, necesito usar una matriz de botones. Necesito que al pasar por encima de un boton se ...
  #1 (permalink)  
Antiguo 26/05/2009, 14:24
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
-ayuda-problema con matriz de botones

Hola a todos!

En un programa que estoy haciendo, necesito usar una matriz de botones. Necesito que al pasar por encima de un boton se me cambien de color los de la misma fila, columna y diagonales. Pero lo tengo todo listo pero el problema está en que cuando paso por encima de un boton no se como saber en que fila y columna estava el boton que envio la acción.
Se me olvidó decir que el numero de filas y columnas me lo entran por teclado, o sea que es variable.
El codigo del metodo usado es este:
Código:
public static void MouseEntered(java.awt.event.MouseEvent evt) {
   //aquí iria el codigo de pintar los botones
}
El codigo que uso para enviar la acción es este:
Código:
tablero[j][i].boton.addMouseListener(new java.awt.event.MouseAdapter() {
		    	    public void mouseEntered(java.awt.event.MouseEvent evt) {
		    	        MouseEntered(evt);
		    	    }
		    	});
No se que hacer. Si teneis alguna solución por favor decidmela.

Gracias.
  #2 (permalink)  
Antiguo 26/05/2009, 14:53
 
Fecha de Ingreso: abril-2009
Mensajes: 82
Antigüedad: 15 años
Puntos: 2
Respuesta: -ayuda-problema con matriz de botones

Buenas:

Pues así que se me venga a la cabeza de buenas a primeras tendrías dos formas de hacerlo:
  1. Tener por cada boton de la matriz una instancia, en cuyo caso le pasas la fila y la columna del botón al que pertenece, y así conoces en que posición está el botón activo (ya que cada uno tiene un escuchador distinto).
  2. Es un poco más cutre y no te la recomiendo, pero también es factible, que es que en el comando introducido al botón, agreges la fila y la columna en la que se encuetra, y luego recuperes dichos datos recuperando el actionCommand del evento.

Son un par de soluciones, pero seguro que a alguien se le ocurre alguna mejor.

Saludos.
  #3 (permalink)  
Antiguo 26/05/2009, 15:30
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: -ayuda-problema con matriz de botones

@Squar Me podrias explicar un poco mas concreto la 1era solución que me has dado es que no entiendo bien como puedo hacerlo.

Gracias.
  #4 (permalink)  
Antiguo 26/05/2009, 15:45
 
Fecha de Ingreso: abril-2009
Mensajes: 82
Antigüedad: 15 años
Puntos: 2
Respuesta: -ayuda-problema con matriz de botones

Si claro...

Para cada botón tendrás que tener asignado un listener concreto, ¿no es así? Si lo que deseas es diferenciar cada elemento sin necesidad de hacer cambios extraños, para cada boton tienes que crear una instancia de ese listener y pasarle en el constructor la posición de la fila y la columna del botón al que hace referencia. Por ejemplo:

Matriz de botones
Código:
JButton[][] buttons = new JButton[2][2];

// Creas los botones
buttons[0][0] = new JButton("Boton 0.0");
buttons[1][0] = new JButton("Boton 1.0");
buttons[0][1] = new JButton("Boton 0.1");
buttons[1][1] = new JButton("Boton 1.1");

// Asignas a cada boton una instancia de cada escuchador
buttons[0][0].setListener( new MyListener(0, 0) );
buttons[1][0].setListener( new MyListener(1, 0) );
buttons[0][1].setListener( new MyListener(0, 1) );
buttons[1][1].setListener( new MyListener(1, 1) );
Clase del escuchador
Código:
private int fila;
private int columna;

public MyListener(int fila, int columna) {
     this.fila = fila;
     this.columna = columna;
}
Así, como cada botón tiene un escuchador único diferenciado porque el escuchador lleva incluido en el código la columna y la fila del botón al que pertenece, ya solo tendrías que hacer uso de dichos atributos.

Espero haberme explicado mejor ahora.

Un saludo.
  #5 (permalink)  
Antiguo 26/05/2009, 16:03
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: -ayuda-problema con matriz de botones

Si, muchas gracias. Lo he provado y al hacer esto:

Código:
tablero[j][i].boton.setListener( new MyListener(j, i) ;
Me dice: The method setListener(MyListener) is undefined for the type JButton.

¿Por qué me dice esto?

Supongo que se nota que aún estoy aprendiendo, soy novato con esto de los escuchadores.

Gracias.
  #6 (permalink)  
Antiguo 27/05/2009, 12:29
Avatar de DiabloGuardian  
Fecha de Ingreso: noviembre-2008
Ubicación: Hidalgo
Mensajes: 215
Antigüedad: 15 años, 5 meses
Puntos: 3
Respuesta: -ayuda-problema con matriz de botones

que tal makh16
yo te recomiendo que hagas un solo metodo actionPerformed y en el hagas algo parecido a esto


Código:
public void actionPerformed(ActionEvent ev){
                                // obtines la fuente del evento			JButton boton=(JButton) ev.getSource();
                                    //lo comparas para ver que boton fue pulsado
			if(boton.getText().equals("Ecuacion")){
				// aqui tu codigo de lo que quieres que haga
                                	}
			if(boton.getText().equals("Generar")){
				//aqui mas codigo			}
			if(boton.getText().equals("Ver Grafica")){
				//y mas codigo
			}
	}

las comparaciones las puedes hacer iterativas (asi como creaste tus botones)
y al crear tus botones puedes poner botones[i][j].addActionListener(la clase donde esta el metodo)


ojala y te sirva
__________________
-=:[ Lo importante no es saber todo, sino saber buscar ]:=-
  #7 (permalink)  
Antiguo 28/05/2009, 01:48
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: -ayuda-problema con matriz de botones

@Diablo Guardian Gracias por tu respuesta! El problema es que todos los botones tienen la misma etiqueta y si hago eso me ejecutaria siempre el código.
  #8 (permalink)  
Antiguo 28/05/2009, 04:52
 
Fecha de Ingreso: abril-2009
Mensajes: 82
Antigüedad: 15 años
Puntos: 2
Respuesta: -ayuda-problema con matriz de botones

Buenas:

Perdona por mi desaparición, ayer no me pude conectar. Vayamos por el principio: la clase MyListener tiene que heredar de MouseListener (implements MouseListener). Esta interfaz contiene varios métodos relacionados con distintas acciones que se pueden realizar con el ratón. En tu caso, necesitarías implementar el método mouseEntered(MouseEvent e). Este método es llamado cuando tu ratón entra en el área del botón, que es cuando debes cambiar los colores de las columnas y las filas. Además de este método, tiene otros para cuando sales del área del botón (que tendrás que usar para volver al color original), para cuando clickeas el botón, cuando lo presionas, y cuando lo sueltas. Estos métodos también tendrás que incluirlos en tu clase, salvo que los puedes dejar vacíos y que no hagan nada.

Una vez creada esta clase, y aquí hay otro cambio ya que antes me equivoqué, tienes que indicarle al botón dicho escuchador:

Código:
buttons[0][0].addMouseListener( new MyListener(0, 0) );
buttons[1][0].addMouseListener( new MyListener(1, 0) );
buttons[0][1].addMouseListener( new MyListener(0, 1) );
buttons[1][1].addMouseListener( new MyListener(1, 1) );
Espero que esta vez me haya explicado mejor. Saludos.
  #9 (permalink)  
Antiguo 28/05/2009, 06:03
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: -ayuda-problema con matriz de botones

@Squar muchísimas gracias, al final lo he conseguido!Ya me dice la fila y la columna. No sabia que al crear la clase escuchador tenias que ponerle todos los mouse.... aunque no los usaras.
  #10 (permalink)  
Antiguo 29/05/2009, 03:49
 
Fecha de Ingreso: abril-2009
Mensajes: 82
Antigüedad: 15 años
Puntos: 2
Respuesta: -ayuda-problema con matriz de botones

Tienes que ponerlos porque estás implementando un interfaz, y la interfaz te obliga. Al igual que si el escuchador, en vez de implementar de MouseListener implementa el ActionListener (que es el usual que se implementa) tendrías que implementar el actionPerformed(ActionEvent e) que te indicaba el compañero. En tu caso no podías usar éste último porque este tipo de eventos solo se producen con el ratón al clikear el botón.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:09.