Создание массива кнопок на панели - Java
Формулировка задачи:
Хотелось бы создать массив кнопок на форме (панели). Есть некий код с GridBagLayout
Со строки 20 хотелось бы изменить код, чтобы панелька могла быть действительно гибкой, а не только прямоугольной.
Для того, чтобы посмотреть более по́лно код, со всеми классами, посетите GitHub страницу.
// конструктор 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)); } } }
Не по теме:
Ну и, если я действительно чего-то не знаю, то помогите со строкой 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)); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д