La Web del Programador: Comunidad de Programadores
 
    Pregunta:  62523 - AYUDA CON JPANEL Y JLABELS
Autor:  antonio perez
Hola, tengo un proyecto de un laboratorio de computacion, tengo que desarrollar un software que me permita visualizar el estado de cada computadora ejemplo, si esta ocupada, disponible, descompuesta. para esto tengo que colocar iconos en un Jpanel que representaran cada maquina, la cantidad de maquinas que se generan en el Panel se obtiene de una tabla en acces, la cual me almacena el numero de maquina y su estado. Yo realizo una consulta desde java para saber cuantas computadoras hay, para asi poder colocar el numero de iconos en el Panel, asi podre usar este programa para diferente numero de maquinas ya que si quitan una computadora del laboratorio mi programa quedaria obsoleto. El evento que utilizo en cada label es el mouseMoved() pero lo que no logro es saber que numero de maquina es en la que tengo mi mouse, si les interesa ayudarme mandenme un correo a [email protected] muchas gracias

  Respuesta:  Rafa Rafa
se me ocurre la siguiente solución:

1. Crear una clase que herede a JLabel y agregarle la propiedad índice, la cual indicará el lugar que ocupa dentro de un arreglo.

2. crear una arreglo de elementos de la clase ya mencionada.

3. usar getSource() al momento de implementar los eventos.

Te envío el código de las dos clases. Al hacer clic sobre cualquier JLabel informa cual es su correspondiente índice.

// codigo de la clase principal:

import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class principal extends JFrame {

private static principal ventana;
private static JPanel panel;
private static etiqueta[] etiqueta;

public principal() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
setSize(500, 500);
setLocation(10, 10);
panel = new JPanel();
panel.setLayout(null);
panel.setOpaque(true);
panel.setBackground(Color.yellow);
panel.setSize(400, 400);
panel.setLocation(50, 50);
panel.setVisible(true);
add(panel);
etiqueta = new etiqueta[10];
for(int i = 0; i < 10; i ++) {
etiqueta[i] = new etiqueta(i);
etiqueta[i].setText(String.valueOf(i));
etiqueta[i].setOpaque(true);
etiqueta[i].setBackground(Color.white);
etiqueta[i].setBorder(BorderFactory.createLineBorder(Color.blue));
etiqueta[i].setSize(40, 40);
etiqueta[i].setLocation(40 * i, 0);
etiqueta[i].setVisible(true);
panel.add(etiqueta[i]);
}
setVisible(true);
repaint();
eventos();
}

private void eventos() {
for(int i = 0; i < 10; i ++) {
etiqueta[i].addMouseListener(new MouseListener() {

@Override
public void mouseClicked(MouseEvent arg0) {

}

@Override
public void mouseEntered(MouseEvent arg0) {

}

@Override
public void mouseExited(MouseEvent arg0) {

}

@Override
public void mousePressed(MouseEvent arg0) {
int indice = ((etiqueta)arg0.getSource()).getIndice();
JOptionPane.showMessageDialog(null, "hiciste clic en la etiqueta " + indice);
}

@Override
public void mouseReleased(MouseEvent arg0) {

}

});
}
}

public static void main(String[] args) {
ventana = new principal();
}

}

// --------------------------------------------------------------
// codigo de la clase etiqueta

import javax.swing.JLabel;

public class etiqueta extends JLabel {

private int indice; // indice que se recuperara en el evento del raton

public etiqueta(int indice) {
this.indice = indice;
}

public int getIndice() {
return indice;
}

}