С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
36 / 3 / 0
Регистрация: 21.05.2018
Сообщений: 111

Обработка события JButton

13.07.2018, 13:58. Показов 1309. Ответов 2

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане! Моя первая работа с ГУИ и возникли затруднения. Не понимаю поведения программы. Суть в следующем. Делаю простое приложение. Выглядит оно так:
. Не взыщите за простоту). Кнопки - JButton, объединенные в ButtonGroup. При нажатии на одну из них, в случае достаточного количества средств, должен запускаться процесс приготовления. В моем случае это перевод курсора в состояние WAIT и вывода сообщения в Info "Идет приготовление". По окончании выводиться диалоговое окно - "Заберите напиток". Проблема в том, что при нажатии на кнопку, курсор меняется, а сообщение в Info появляется только после окончания задержки. Полагаю, что дело в потоках, с ними я пока не очень- то дружу (пытался прикрутить ProgressMonitor, что в общем-то получилось, но диалоговое окно выскакивало раньше, чем заканчивался прогресс), поставить все в очередь не получилось и решил остановиться на более простом варианте).
Обработка нажатия на кнопку выглядит следующим образом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for (final JButton button: buttons){
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String title = button.getText();
                    System.out.println(title);
                    int price = automat.getMenuMap().get(title);
                    if (price==automat.getCash()){
                        try {
                            info.setText("Идет приготовление");
                            button.setCursor(new Cursor(Cursor.WAIT_CURSOR));
                            TimeUnit.MILLISECONDS.sleep(5000);
                        } catch (InterruptedException e1) {
                            e1.printStackTrace();
                        }
                        button.setFocusPainted(false);
                        JDialog dialog = new Dialog(null,"Заберите напиток",200,100);
                        dialog.setVisible(true);
                        }
                  }
            });
          }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.07.2018, 13:58
Ответы с готовыми решениями:

Обработка события jButton
Здравствуйте, помогите разобраться: Добавлено через 10 минут у меня есть три класса - первый создает окно программы и график, второй...

JButton обработка свойства OnClick
Всем доброго времени суток. Друзья, JButton bt=new JButton("Ckick"); bt.setLocation(290, 250); ...

Обработка события
Подскажите пожалуйста, как сделать что бы по нажатию пункта меню надо будет менять количество кнопок на панели, а ненужные скрывать.

2
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
13.07.2018, 14:16
Njula, возьми какую-нибудь книгу по Свинг (кстати его уже не иcпользуют, только JavaFX), насколько я помню из далекого прошлого, когда тыкал свинги, то там все события ГУИ идут в одном потоке (основном) и если нужны какие то задержки и прочее то это надо делать в другом потоке, иначе весь ГУИ зависает.
Скажем если ты на какую то кнопку повесишь ресурсоемкую операцию, например скачивание файла, то весь твой ГУИ зависнет и перестанет отвечать, пока операция не окончится.
Поэтому создают отдельные потоки-демоны в которые выносят все, что может замедлять работу, скажем твой слипер.
1
36 / 3 / 0
Регистрация: 21.05.2018
Сообщений: 111
14.07.2018, 13:13  [ТС]
Пока мои представления ограничиваются материалом из книги Эккеля. Видимо нужно более детальное изучение. Впрочем потоки я только начал изучать.
" кстати его уже не иcпользуют, только JavaFX" - Дойдет дело и до JavaFX... Следующий проект буду делать в этой API. Насчет демона я подумаю. Спасибо.

Добавлено через 21 час 43 минуты
Цитата Сообщение от Welemir1 Посмотреть сообщение
возьми какую-нибудь книгу по Свинг
- да, я нашел литературу, буду параллельно читать.
Цитата Сообщение от Welemir1 Посмотреть сообщение
Поэтому создают отдельные потоки-демоны
- создал вспомогательный поток-демон для эксперимента, но как и предполагал работает он не так, как мне нужно. Да, он запускается и работает параллельно, но раньше выскакивает диалоговое окно, а нужно именно такой порядок: в info появляется сообщение - идет приготовление, затем курсор переходит в состояние WAIT, задержка времени и только после этого появляется диалоговое окно. Ну и курсор возвращается в дефолтное состояние. В первоначальном варианте работало почти как надо, только текст в info появлялся после задержки. Как бы мне все-таки упорядочить эти события?

Добавлено через 15 минут
Все, разобрался). Просто вызов диалога тоже нужно было добавить в демон. Работает.

Добавлено через 9 минут
Хотя читал, что обращаться к компонентам swing нужно только из потока событий, но ничего, работает...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.07.2018, 13:13
Помогаю со студенческими работами здесь

Обработка события кнопки
Только начал изучать Java, вот посоветовали вместо awt использовать swing. Попытался, в итоге netbeans посоветовал повключть разных пакетов...

События и их обработка
Здравствуйте. Суть вопроса: есть клас события package colibri; import java.util.ArrayList; import java.util.EventObject; ...

Обработка события Click, вставка html после генерации и обработка этого кода
Подскажите пожалуйста как заставить работать эту часть кода 18 строка $(".image").click(function() { ...

обработка события
:)Здравствуйте! Подскажите пожалуйста как можно описать обработчик события вне класса. Имеется класс, который выводит на форму некоторое...

Обработка события
Есть событие public event EventHandler<CopyingFileEventArgs> CopyingFile Подскажите пожалуйста как его обработать Вот ссылка на...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru