нарисованное изображение на jpanel не может быть показано после добавления рамки, даже если оно перерисовано - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь сделать игру в шахматы, чтобы показать шахматные фигуры на доске, я сделал основной 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;
                    }
                }
            }   
        }   
    }

}

Это код, в котором я добавляю границы и удаляю границы, когда фигура либо выбирается, либо перестает быть выбранной. Если кто-нибудь может мне помочь, большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...