Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 09.10.2013
Сообщений: 34

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

18.02.2017, 21:40. Показов 1799. Ответов 1

Студворк — интернет-сервис помощи студентам
Хотелось бы создать массив кнопок на форме (панели). Есть некий код с GridBagLayout

Код для панели
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// конструктор
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 переменная для использования её в лямбда выражениях.

0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2017, 21:40
Ответы с готовыми решениями:

Создание собственной панели и кнопок в Word97.
dmitry@mael.ru Очень жду

Создание кнопок на панели инструментов, выполняющих макросы
Доброго времени суток! Помогите пожалуйста решить следующую проблему: Необходимо в документе Excel разместить на панели инструментов...

Информация от нажатия кнопок на одной панели должна выводится на другой панели
Добрый день и удачи Всем! Помогите пожалуйста. Я начинающий программист в Delphi7.Проблема заключается в следующем: На панели номер 1...

1
0 / 0 / 1
Регистрация: 09.10.2013
Сообщений: 34
23.02.2017, 13:05  [ТС]
Неведомо, как проблема решается, но я просто добавил проверку
Строки 22–28
Java
1
2
3
4
5
6
7
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));
        }
    }
}


Не по теме:

Исправил в коммите 0f78ee9

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2017, 13:05
Помогаю со студенческими работами здесь

Создание массива кнопок
В общем, хочется сделать универсальный скрипт для кнопок, чтоб при добавлении новых предметов, нужно бы было просто закинуть объект и...

Динамическое создание массива кнопок
Объясните, пожалуйста, подробнее, как создается массив кнопок и происходит к ним обращение.

Создание массива из существующих кнопок
Ребят, помогите разобраться. Этот код создает массив из новых объектов(кнопок) QPushButton *button; button = new QPushButton(this); ...

Динамическое создание массива кнопок с событием
Только начинаю копать C#, прошу сильно не пинать. Создаю массив кнопок с событием: Button btnDisk1; //////// ...

создание массива кнопок Visual C++ CLR
Не подскажет кто как создать массив кнопок типа Button?:)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru