Вот соответствующий код для отображения панели продвижения и кнопок:
Код: Выделить всё
public class Board extends JPanel {
[ ... other Code ... ]
private void showPromotionPanel(Move move) {
pawnPromotion = true;
int panelX = move.newColumn * TILE_SIZE;
int panelY = move.newRow * TILE_SIZE;
// If the pawn is black, move the panel up
if (!move.piece.isWhite) {
panelY -= TILE_SIZE * 3;
}
// Set a null layout for the container to allow manual positioning
setLayout(null);
// Set the position and size of the panel
promotionPanel.setBounds(panelX, panelY, TILE_SIZE, TILE_SIZE * 4);
// Clear the panel in case there are old buttons
promotionPanel.removeAll();
// Add buttons for possible promotions
Class[] pieceClasses = { Queen.class, Rook.class, Bishop.class, Knight.class };
for (Class pieceClass : pieceClasses) {
ImageIcon icon = new ImageIcon(Objects.requireNonNull(getPieceImage(pieceClass, move.piece.isWhite)));
JButton button = new JButton(icon);
button.setBounds(0, Arrays.stream(pieceClasses).toList().indexOf(pieceClass) * TILE_SIZE, TILE_SIZE, TILE_SIZE);
button.setPreferredSize(new Dimension(TILE_SIZE, TILE_SIZE));
button.setBackground(Colors.PROMOTION.getColor());
button.setForeground(Color.WHITE);
button.setBorder(BorderFactory.createEmptyBorder());
button.setContentAreaFilled(false);
button.addActionListener(e -> promotePawn(move, pieceClass));
promotionPanel.add(button);
log("Promotion button: " + button);
}
// Add the panel to the container and ensure it's visible
add(promotionPanel);
promotionPanel.revalidate();
promotionPanel.repaint();
promotionPanel.setVisible(true);
promotionPanel.setFocusable(true);
promotionPanel.requestFocusInWindow();
// Add the panel again to ensure it renders on top
setComponentZOrder(promotionPanel, 0);
log("Promotion panel: " + promotionPanel.toString());
log("Showing promotion panel at " + panelX + ", " + panelY);
}
private void createPromotionPanel() {
promotionPanel = new JPanel(new GridLayout(4, 1));
promotionPanel.setSize(TILE_SIZE, TILE_SIZE * 4);
promotionPanel.setBackground(Colors.TILE_LIGHT.getColor());
promotionPanel.setVisible(false);
this.add(promotionPanel);
}
[ ... other Code ... ]
}
Кнопки продвижения отображаются как недействительные (см. вывод журнала ниже) и не реагируют на нажатия.
Я Я пробовал различные решения этой проблемы, в том числе онлайн-исследования и консультации по инструментам искусственного интеллекта, но, поскольку я все еще новичок, мне не удалось решить проблему.
Вывод журнала:< /p>
Кнопка продвижения: javax.swing.JButton[,0,0,95x95,invalid,...]
Кнопка продвижения: javax.swing. JButton[,0,95,95x95,invalid,...]
Кнопка продвижения: javax.swing.JButton[,0,190,95x95,invalid,...]
Кнопка продвижения: javax.swing. JButton[,0,285,95x95,invalid,...]
Панель продвижения: javax.swing.JPanel[,380,0,95x380,invalid,...]
Будем очень признательны за любые указания о том, почему кнопки могут быть недействительными или не функционировать!
Я уже пробовал несколько решений этой проблемы, включая поиск в Интернете. за ответами, экспериментируя с различными подходами и даже обращаясь за предложениями к инструментам искусственного интеллекта. Однако, поскольку я все еще новичок, мне не удалось решить проблему. мне нужно т
Подробнее здесь: https://stackoverflow.com/questions/791 ... chess-game
Мобильная версия