
Я расскажу о своем опыте создания приложения на Swing с использованием менеджера компоновки GridLayout, которое отображает шахматную доску из объектов JPanel. Для начала, мне потребуется создать двумерный массив JPanel, чтобы представить каждую клетку доски.java
import javax.swing.*;
import java.awt.*;
public class ChessBoardApp extends JFrame {
private JPanel[][] chessBoard;
public ChessBoardApp {
setTitle(″Шахматная доска″);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
// Задайте количество строк и столбцов доски
int rows 8;
int cols 8;
// Создайте новый GridLayout с указанным числом строк и столбцов
GridLayout gridLayout new GridLayout(rows, cols);
// Установите менеджер компоновки для фрейма
setLayout(gridLayout);
// Создайте двумерный массив JPanel с размером доски
chessBoard new JPanel[rows][cols];
// Заполните доску панелями и установите фоновый цвет для каждой клетки
for (int i 0; i < rows; i ) {
for (int j 0; j < cols; j ) {
chessBoard[i][j] new JPanel;
// Установите цвет фона в зависимости от координат клетки
if ((i j) % 2 0) {
chessBoard[i][j].setBackground(Color.WHITE);
} else {
chessBoard[i][j].setBackground(Color.BLACK);
}
// Добавьте панель на фрейм
add(chessBoard[i][j]);
}
}
// Установите размеры фрейма в зависимости от размера панелей
pack;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable {
public void run {
ChessBoardApp app new ChessBoardApp;
app.setVisible(true);
}
});
}
}
В этом примере я создал класс `ChessBoardApp`, который наследуется от `JFrame` и реализует основное окно приложения. В конструкторе класса я настраиваю основные параметры фрейма, такие как название, операцию закрытия и возможность изменения размера окна. Затем я создаю объект `GridLayout` с указанным количеством строк и столбцов, которые соответствуют размеру шахматной доски. Этот менеджер компоновки позволяет размещать компоненты в виде сетки. Далее я создаю двумерный массив `chessBoard` с размером доски. Затем я заполняю массив объектами `JPanel` и устанавливаю фоновый цвет каждой клетки в зависимости от ее координат. Если сумма индексов строки и столбца является четной, то цвет фона будет белым, иначе — черным. После этого каждую панель добавляю на фрейм, используя метод `add`. Наконец, я устанавливаю размер фрейма в соответствии с размером панелей, вызывая метод `pack`, и отображаю фрейм, устанавливая его видимость в `true`.