Я пытаюсь сделать игру в шахматы, чтобы показать шахматные фигуры на доске, я сделал основной JPanel, который имеет разметку сетки, содержащую все плитки, которые также являются JPanel. Затем я рисую фигуры на доске, используя эту функцию:
public void drawPiece(Graphics g) {
try {
g.drawImage(ImageIO.read(Queen.class.getResource(path)), 18, 10, 75, 90, null);
} catch (IOException e) {
e.printStackTrace();
}
g.dispose();
}
Это работает нормально, проблема, с которой я сталкиваюсь, возникает, когда я пытаюсь установить границу на JPanel, в которой уже есть фрагмент. У меня есть цветовой код, чтобы поставить границы на плитки, чтобы показать недопустимые ходы, убить ходы и нормальные ходы, когда фигура выбрана. Когда я помещаю границу там, где есть шахматная фигура, изображение исчезает, и даже если я рисую его снова сразу после добавления границы, оно не отображается.
Для решения я попытался поместить вторую панель JPanel поверх моей панели плиток, которую я назвал graphicsPanel, на этой панели я сейчас рисую шахматную фигуру, а затем меняю границу плитки, содержащей панель, на которой находится изображение. и это ничего не исправило, проблема остается той же.
У меня нет идей, и я не знаю, как это исправить, поэтому, если кто-нибудь сможет мне помочь, это было бы здорово, спасибо!
public void mouseClicked(MouseEvent e) {
Tile tile = (Tile) e.getSource();
ArrayList<Point> possibleMoves = new ArrayList<Point>();
if(tile.piece != null) {
switch(currentTurn) {
case white:{
for(Piece current: this.white.pieceList) {
if(current.x + current.y * 8 == tile.number) {
if(current.isSelected == false) {
current.isSelected = true;
possibleMoves = current.possibleMoves();
for(Point currentPoint: possibleMoves) {
if(board.tileList.get(currentPoint.x + currentPoint.y * 8).piece == null) {
board.tileList.get(currentPoint.x + currentPoint.y * 8).setBorder(legalMoveBorder);
}else if(board.tileList.get(currentPoint.x + currentPoint.y * 8).piece.color == 'b') {
board.tileList.get(currentPoint.x + currentPoint.y * 8).setBorder(killBorder);
}else {
board.tileList.get(currentPoint.x + currentPoint.y * 8).setBorder(illegalMoveBorder);
}
}
}else {
current.isSelected = false;
board.removeAllBorders();
}
break;
}
}
}
case black:{
for(Piece current: this.black.pieceList) {
if(current.x + current.y * 8 == tile.number) {
if(current.isSelected == false) {
current.isSelected = true;
possibleMoves = current.possibleMoves();
for(Point currentPoint: possibleMoves) {
if(board.tileList.get(currentPoint.x + currentPoint.y * 8).piece == null) {
board.tileList.get(currentPoint.x + currentPoint.y * 8).setBorder(legalMoveBorder);
}else if(board.tileList.get(currentPoint.x + currentPoint.y * 8).piece.color == 'w') {
board.tileList.get(currentPoint.x + currentPoint.y * 8).setBorder(killBorder);
}else {
board.tileList.get(currentPoint.x + currentPoint.y * 8).setBorder(illegalMoveBorder);
}
}
}else {
current.isSelected = false;
board.removeAllBorders();
}
break;
}
}
}
}
}
}
Это код, в котором я добавляю границы и удаляю границы, когда фигура либо выбирается, либо перестает быть выбранной.
Если кто-нибудь может мне помочь, большое спасибо!