Как правильно сделать так, чтобы GridLayout производил указанное количество строк и столбцов? (Создание шахматной доски) - PullRequest
0 голосов
/ 28 марта 2019

Я создаю игру в шахматы, используя Java & Swing.Чтобы сделать шахматную доску, я использую GridLayout для моего JFrame.Вывод неверно показан.Вместо этого я получаю 9 столбцов и 7 строк + дополнительный ряд с 2 квадратами.Чередование цветов работает.

Я указал количество строк и столбцов (8x8, как настоящая шахматная доска) и использую цикл for для добавления JPanels в JFrame (с чередующимся цветом).Я поиграл с количеством итераций в цикле и размером моей сетки, но пока это не сработало.

Соответствующий метод:

private void createBoard() {
        f = new JFrame("Checkers");

        for (int i = 0; i <= 64; i++) {
            JPanel panel = new JPanel();
            if (i % 2 == 0) {
                panel.setBackground(Color.LIGHT_GRAY);
            } else {
                panel.setBackground(Color.DARK_GRAY);
            }
            f.add(panel);
        }

        f.setLayout(new GridLayout(8,8));
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.setSize(windowSize, windowSize);
        f.setVisible(true);
    }

Я ожидаюэтот метод для создания JFrame, заполненного 64 панелями (8 строк и 8 столбцов в квадратной рамке), каждая панель имеет альтернативный цвет.

1 Ответ

2 голосов
/ 28 марта 2019
for (int i = 0; i <= 64; i++) {

Вы добавляете 65 панелей.

Код должен быть:

for (int i = 0; i < 64; i++) {

Конструктор GridLayout работает не так, как вы ожидаете:

f.setLayout(new GridLayout(8,8));

Код должен быть:

f.setLayout(new GridLayout(0,8));

Теперь компоненты будут автоматически переноситься при достижении 8-го столбца, добавляя столько строк, сколько необходимо.

Кроме того, обычно вы устанавливаете макетпанели ДО ДО того, как вы добавите компоненты.В случае GridLayout это не имеет значения, но это хороший навык.

Цвета не проблема

Как только вы решите вышеуказанную проблему,станет новой проблемой.Мой оригинальный комментарий касается проблемы.Проблема заключается в вашей логике для определения, как покрасить панели.

...