J'ai un tableau de JPanel
s et j'essaie d'ajouter un mouseadapter à chacun afin qu'il sera possible d'identifier celui qui a été cliqué puis de changer sa couleur de fond. Tout semble fonctionner très bien, sauf quand je le lance à partir éclipse quand une page apparaît qui dit EventDispatchThread.run()
ligne: non disponible, source introuvable, et dans la fenêtre de débogage, il dit:java mouseadapter source non trouvé
Thread [AWT-Shutdown] (Running)
Daemon Thread [AWT-Windows] (Running)
Thread [AWT-EventQueue-0] (Suspended (exception ArrayIndexOutOfBoundsException))
EventDispatchThread.run() line: not available
Thread [DestroyJavaVM] (Running)
Thread [AWT-EventQueue-0] (Running)
Voici le code:
private void drawBoard() {
LayoutManager layout = new GridLayout(NUMBER_OF_ROWS, NUMBER_OF_COLS);
boardPanel.setLayout(layout);
boardPanel.setPreferredSize(new Dimension(200, 400));
chessBoard = new JPanel[NUMBER_OF_ROWS][NUMBER_OF_COLS];
MoveArrays move = new MoveArrays();
move.initialisePieceMoves();
for (int i = 0; i < NUMBER_OF_ROWS; i++) {
for (int j = 0; j < NUMBER_OF_COLS; j++) {
int index = i * 4 + j;
chessBoard[i][j] = new JPanel();
chessBoard[i][j].addMouseListener(clickSquare(j, i, index, move));
chessBoard[i][j].setBackground(getColor(i,j));
if (!(boardArray.chessBoard[index].square.isEmpty())) {
Piece piece = (Piece) boardArray.chessBoard[index].square.firstElement();
JLabel pieceString = new JLabel(piece.toString());
chessBoard[i][j].add(pieceString);
}
boardPanel.add(chessBoard[i][j]);
}
}
} // drawBoard()
private MouseAdapter clickSquare(final int xCo, final int yCo, final int index, final MoveArrays move) {
return new MouseAdapter() {
public void mousePressed(MouseEvent me) {
resetColors();
JPanel selectedSquare = (JPanel) me.getSource();
selectedSquare.setBackground(selectedColor());
System.out.println("xCo: " + xCo + " yCo: " + yCo);
Vector validMoves = move.DroneMovesNorth[index].Moves;
int totalMoves = move.DroneTotalMovesNorth[index];
if (!validMoves.isEmpty()) {
for (int n = 0; n <= totalMoves; n++) {
String stringMove = validMoves.elementAt(n).toString();
int intMove = Integer.parseInt(stringMove);
System.out.println("intMove: " + intMove);
}
}
}
};
}
je pense que ce pourrait être le fait que je jetai l'me.getSource à un JPanel
, mais il ne devrait pas être un de toute façon? Si je ne mets pas le cast, il dit qu'il ne peut pas lier un 'Object' à un JPanel
, quand je fais System.out.print(me.getSource())
il imprime une ligne disant que c'est un JPanel
donc je ne comprends pas quel est le problème. Toute aide serait très appréciée!
Le moyen le plus simple d'attacher la source au runtime Java dans Eclipse est de vous assurer que votre projet utilise un JDK plutôt qu'un JRE. Vous pouvez configurer vos versions disponibles de Java dans Fenêtre-> Préférences-> Java-> JRE installés. Faire un JDK par défaut et le débogage devrait être plus facile. –
Merci beaucoup: D Cela s'est débarrassé de l'erreur source introuvable! – Becky