J'ai un problème où je ne peux pas accéder correctement à mes données de point d'instance.Les points ne sont pas correctement lus par MouseListener
Je crée un tableau multi-dimensionnel de GridPanels et instancie chacun avec un point. Lors de sa création, tout fonctionne comme prévu.
pic1 http://img.skitch.com/20100218-fciwr7t73ci2gajafmfxa2yf9q.jpg
Lorsque je clique sur un GridPanel cependant, la classe Listener reçoit toujours le point des dernières GridPanel qui a été créé ((3, 3) dans ce cas.)
Quand je passer un int au lieu d'un point cependant, l'int pour le GridPanel qui a été cliqué est montré (comme vous vous en doutez).
Quelqu'un sait ce qui se passe ici?
Merci
import javax.swing.JFrame;
/**
* Driver class.
*/
public class Test {
/**
* The main method.
* @param args Command line arguments.
*/
public static void main(String[] args) {
JFrame frame = new JFrame("TEST");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TestPanel panel = new TestPanel();
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}
import java.awt.GridLayout;
import java.awt.Point;
import javax.swing.JPanel;
/**
* Creates a 4 by 4 grid of GridPanels.
*/
public class TestPanel extends JPanel {
static final int ROW_SIZE = 4;
static final int COL_SIZE = 4;
private GridPanel[][] g = new GridPanel[ROW_SIZE][COL_SIZE];
public TestPanel() {
Point coords = new Point();
setLayout(new GridLayout(ROW_SIZE, COL_SIZE));
for (int i = 0; i < ROW_SIZE; i++) {
for (int j = 0; j < COL_SIZE; j++) {
coords.setLocation(i, j);
g[i][j] = new GridPanel(coords);
add(g[i][j]);
}
}
}
}
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* Contains the MouseListener.
*/
public class GridPanel extends JPanel {
private JLabel label;
private Point p;
public GridPanel(Point p) {
this.p = p;
label = new JLabel("" + p);
add(label);
setBackground(Color.WHITE);
setPreferredSize(new Dimension(200, 50));
addMouseListener(new SelectListener());
}
private class SelectListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
label.setText("" + p);
}
}
}
Ouais, c'est tout. – Mike42
Ah mec, je devrais d'attrapé ceci. Je suis encore nouveau à ce sujet, donc même si je "connaissais" déjà cela, l'explication a certainement aidé. Merci beaucoup! – Dean