배열이 JPanel
입니다. mouseadapter를 각각에 추가하려고 시도 했으므로 어느 것을 클릭했는지 식별하고 배경색을 변경할 수 있습니다. 모든 것은 내가 페이지가 나타납니다 이클립스에서 실행하는 경우를 제외하고 잘 작동하는 것 같다 EventDispatchThread.run()
라인 말합니다 : 사용할 수 없습니다, 소스를 찾을 수 없습니다, 및 디버그 창에서 말한다 :java mouseadapter 소스를 찾을 수 없습니다.
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)
이 코드입니다 :
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);
}
}
}
};
}
나는 me.getSource를 JPanel
으로 캐스팅했으나 어쨌든 하나가 아니어야한다고 생각합니다. 캐스트를 넣지 않으면 'Object'를 JPanel
에 바인딩 할 수 없다고 말하면 System.out.print(me.getSource())
을 입력하면 JPanel
이라는 줄이 인쇄되므로 문제가 발생하지 않습니다. 어떤 도움을 많이 주시면 감사하겠습니다!
Eclipse에서 Java 런타임에 소스를 첨부하는 가장 쉬운 방법은 프로젝트에서 JRE 대신 JDK를 사용하는지 확인하는 것입니다. Window -> Preferences -> Java -> Installed JRE에서 사용 가능한 Java 버전을 구성 할 수 있습니다. JDK를 기본값으로 만들고 디버깅이 쉬워야합니다. –
Thanks a lot : D 이것은 소스를 찾을 수 없다는 오류를 없앴습니다! – Becky