Создание массива кнопок на панели - Java

Узнай цену своей работы

Формулировка задачи:

Хотелось бы создать массив кнопок на форме (панели). Есть некий код с GridBagLayout
// конструктор
public ColorChoosing(ColorsList colorsList) {
        // buttons — массив кнопок
        ArrayList<JButton> buttons = new ArrayList<>();
        // btnColors — массив цветов для кнопок (лежит в отдельном классе, передаётся через экземпляр)
        ArrayList<Color> btnColors = colorsList.getColors();
        // Для каждой кнопки задаётся её цвет
        for (int i = 0; i < btnColors.size(); i++) {
            // крайне странная реализация (сам делал) для лямбда выражений
            final int m = i;
            // в массив добавляется кнопка
            buttons.add(new JButton());
            // для каждой кнопки задаётся цвет из коллекции цветов
            buttons.get(i).setBackground(btnColors.get(i));
            // каждой кнопке задаётся ActionListener для добавления её цвета в другую коллекцию
            buttons.get(i).addActionListener(event -> addColor(btnColors.get(m)));
        }
        // n — ширина поля, рисуемого на поле
        // вот тут я бы хотел узнать какой-нибудь другой алгоритм
        int n = (int) Math.floor(Math.sqrt(btnColors.size())) + 1;
        // для каждого столбца
        for (int i = 0; i < n; i++) {
            // здесь если поставить =, то функция внутри будет вылетать, если входных цветов отличное от идеального количество
            for (int j = 0; j <= (btnColors.size() / n); j++) {
                // на панель добавляется кнопка на позиции j*n+i на место i, j
                add(buttons.get(j*n+i), new GridBagConstraints(i,j,1,1,0,0,GridBagConstraints.NORTH,GridBagConstraints.NONE,new Insets(1,1,1,1),0,0));
            }
        }
}
Со строки 20 хотелось бы изменить код, чтобы панелька могла быть действительно гибкой, а не только прямоугольной. Для того, чтобы посмотреть более по́лно код, со всеми классами, посетите GitHub страницу.

Не по теме:

Ну и, если я действительно чего-то не знаю, то помогите со строкой 10, где создаётся final переменная для использования её в лямбда выражениях.

Решение задачи: «Создание массива кнопок на панели»

textual
Листинг программы
for (int i = 0; i < n; i++) {
    for (int j = 0; j <= (btnColors.size() / n); j++) {
        if ((j*n+i) < buttons.size()) {
            add(buttons.get(j*n+i), new GridBagConstraints(i,j,1,1,0,0,GridBagConstraints.NORTH,GridBagConstraints.NONE,new Insets(0,0,0,0),0,0));
        }
    }
}

ИИ поможет Вам:


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

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы