Кнопки панели продвижения не работают в моей игре в шахматыJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Кнопки панели продвижения не работают в моей игре в шахматы

Сообщение Anonymous »

В настоящее время я разрабатываю шахматную игру и столкнулся с проблемой с кнопками на панели продвижения (панель, которая появляется, когда пешка превращается в ферзя, коня, ладью или слона). Кнопки отображаются как недействительные и работают неправильно. Прошу прощения, если упустил что-то очевидное, но я все еще учусь как новичок.
Вот соответствующий код для отображения панели продвижения и кнопок:

Код: Выделить всё

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 ... ]

}
Подробности о проблеме:
Кнопки продвижения отображаются в консоли как недействительные (см. вывод журнала ниже) и не реагируют на нажатия.
Я пробовал различные решения этой проблемы, в том числе онлайн-исследования и консультации по инструментам искусственного интеллекта, но, поскольку я все еще новичок, мне не удалось решить проблему.
Изображение

Вывод журнала:
< blockquote>
Кнопка продвижения: 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»