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

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

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

Хотелось бы создать массив кнопок на форме (панели). Есть некий код с GridBagLayout
Листинг программы
  1. // конструктор
  2. public ColorChoosing(ColorsList colorsList) {
  3. // buttons — массив кнопок
  4. ArrayList<JButton> buttons = new ArrayList<>();
  5. // btnColors — массив цветов для кнопок (лежит в отдельном классе, передаётся через экземпляр)
  6. ArrayList<Color> btnColors = colorsList.getColors();
  7. // Для каждой кнопки задаётся её цвет
  8. for (int i = 0; i < btnColors.size(); i++) {
  9. // крайне странная реализация (сам делал) для лямбда выражений
  10. final int m = i;
  11. // в массив добавляется кнопка
  12. buttons.add(new JButton());
  13. // для каждой кнопки задаётся цвет из коллекции цветов
  14. buttons.get(i).setBackground(btnColors.get(i));
  15. // каждой кнопке задаётся ActionListener для добавления её цвета в другую коллекцию
  16. buttons.get(i).addActionListener(event -> addColor(btnColors.get(m)));
  17. }
  18. // n — ширина поля, рисуемого на поле
  19. // вот тут я бы хотел узнать какой-нибудь другой алгоритм
  20. int n = (int) Math.floor(Math.sqrt(btnColors.size())) + 1;
  21. // для каждого столбца
  22. for (int i = 0; i < n; i++) {
  23. // здесь если поставить =, то функция внутри будет вылетать, если входных цветов отличное от идеального количество
  24. for (int j = 0; j <= (btnColors.size() / n); j++) {
  25. // на панель добавляется кнопка на позиции j*n+i на место i, j
  26. 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));
  27. }
  28. }
  29. }
Со строки 20 хотелось бы изменить код, чтобы панелька могла быть действительно гибкой, а не только прямоугольной. Для того, чтобы посмотреть более по́лно код, со всеми классами, посетите GitHub страницу.

Не по теме:

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

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

textual
Листинг программы
  1. for (int i = 0; i < n; i++) {
  2.     for (int j = 0; j <= (btnColors.size() / n); j++) {
  3.         if ((j*n+i) < buttons.size()) {
  4.             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.         }
  6.     }
  7. }

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


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

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

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы