Eventos do mouse

2 respostas
Basilio

Galera o meu problema é o seguinte:
eu tenho uma serie de panels numa janela, eu quero q quando o mouse passar sobre um deles ele mude de cor

obs:eu fiz um vector de JPanel e coloquei todos eles em um JPanel maior, como eu sei sobre qual elemento o mouse esta por cima?

se o código ajudar...

import java.awt.Color;
import java.awt.GridLayout;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class InterfaceGrafica extends JFrame {

	private JPanel painelPrincipal;
	private Vector<JPanel> casas;

	public InterfaceGrafica() {

		casas = new Vector<JPanel>();
		painelPrincipal = new JPanel();
		painelPrincipal.setLayout(new GridLayout(8, 8));
		painelPrincipal.setBorder(BorderFactory.createLineBorder(Color.BLACK));

		for (int i = 0; i < 64; i++) {
			casas.add(new JPanel());
			painelPrincipal.add(casas.get(i));
			if (((((i < 8) | ((i > 16) & (i < 24)) | ((i > 32) & (i < 40)) | ((i > 48) & (i < 56))) & (i % 2 == 1)))
					| (((((i > 7) & (i < 15)) | ((i > 23) & (i < 31))
							| ((i > 39) & (i < 47)) | (i > 55)) & (i % 2 == 0)))) {
				casas.get(i).setBackground(Color.BLACK);
			}
		}

		add(painelPrincipal);
		setSize(400, 400);
		setLocation(300, 300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}

	public static void main(String[] args) {
		InterfaceGrafica jogo = new InterfaceGrafica();
	}

}

2 Respostas

kaique

Uma saída para o seu problema é registrar todos os seus panels “escutando” um evento do tipo MouseListener. Aí você consegue saber qual o panel que capturou o evento usando o método getComponent(). Essa lógica você implementa dentro do método mouseEntered(MouseEvent e) que você irá escrever.
Acho que é isso. Tenta essa saída e depois dá um retorno aqui…

[]'s.

Basilio

Realmente era isso que eu queria saber vlw.
Ai ta o código, ja aproveitei e coloquei o mouseExited pra cor voltar ao normal quando a seta passar pra outro panel.

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class InterfaceGrafica extends JFrame {

	private JPanel painelPrincipal;
	private Vector<JPanel> casas;
	private Color cor;

	public InterfaceGrafica() {

		casas = new Vector<JPanel>();
		painelPrincipal = new JPanel();
		painelPrincipal.setLayout(new GridLayout(8, 8));
		painelPrincipal.setBorder(BorderFactory.createLineBorder(Color.BLACK));

		for (int i = 0; i < 64; i++) {
			casas.add(new JPanel());
			painelPrincipal.add(casas.get(i));
			casas.get(i).addMouseListener(new MouseListener() {

				public void mouseEntered(MouseEvent e) {
					cor = e.getComponent().getBackground();
					e.getComponent().setBackground(Color.YELLOW);
				}

				public void mouseExited(MouseEvent e) {
					e.getComponent().setBackground(cor);
				}

				public void mouseClicked(MouseEvent arg0) {
				}

				public void mousePressed(MouseEvent arg0) {
				}

				public void mouseReleased(MouseEvent arg0) {
				}
			});

			if (((((i < 8) | ((i > 16) & (i < 24)) | ((i > 32) & (i < 40)) | ((i > 48) & (i < 56))) & (i % 2 == 1)))
					| (((((i > 7) & (i < 15)) | ((i > 23) & (i < 31))
							| ((i > 39) & (i < 47)) | (i > 55)) & (i % 2 == 0)))) {
				casas.get(i).setBackground(Color.BLACK);
			}
		}

		add(painelPrincipal);
		setSize(400, 400);
		setLocation(300, 300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}

	public static void main(String[] args) {
		InterfaceGrafica jogo = new InterfaceGrafica();
	}

}
Criado 1 de julho de 2008
Ultima resposta 2 de jul. de 2008
Respostas 2
Participantes 2