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

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

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

Author24 — интернет-сервис помощи студентам
Хотелось бы создать массив кнопок на форме (панели). Есть некий код с 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2017, 21:40
Ответы с готовыми решениями:

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

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

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

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

1
0 / 0 / 1
Регистрация: 09.10.2013
Сообщений: 34
23.02.2017, 13:05  [ТС] 2
Неведомо, как проблема решается, но я просто добавил проверку
Строки 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
23.02.2017, 13:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.02.2017, 13:05
Помогаю со студенческими работами здесь

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

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

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

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

Переопределение кнопок на панели Panel
Добрый день! Начал заниматься этой замечательной библиотекой EXT JS У меня такой вопрос...

Перегруппировка кнопок на панели навигации
Добрый день. Хочется решить один не очень принципиальный вопрос, более касающийся внешнего вида...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru