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

Button и JDialog

26.03.2014, 10:29. Показов 1378. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При нажатии на кнопку отображается диалоговое окно, но кнопка на которую нажимали остается в нажатом состоянии до тех пор, пока не закроется диалоговое окно. Ума не приложу, что может быть причиной. Помогите пожалуйста.
Вот код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class Golovna extends JFrame {
        NewScrinPatient newPatient = new NewScrinPatient(this);
 
        bNew.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                newPatient.setVisible(true);
                newPatient.showPatientName(mainTable);
                newPatient.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            }
        });
}
и диалоговое окно
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
public class NewScrinPatient extends JDialog{
    private MyButton butOk;
    private MyButton butCancel;
    final int HEIGHT = 450;
    final int WIDTH = 350;
    private ScriningPanels scrinnPanels = new ScriningPanels();
    private JPanel mainPanel;
 
 
    public NewScrinPatient(JFrame owner) {
        super(owner);
        init(owner);
    }
 
    public void init(JFrame owner){
        JPanel buttonPanel = new JPanel(new GridLayout(1,1));
        mainPanel = new JPanel();
        mainPanel.setBorder(new EmptyBorder(5,5,10,5));
        mainPanel.setBackground(new Color(255, 210, 204));
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
        mainPanel.add(scrinnPanels.init());
        butOk = new MyButton();
        butOk.setPreferredSize(new Dimension(60, 60));
        butOk.setBackground(new Color(233, 189, 77));
        butOk.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                onOK();
            }
        });
        butCancel = new MyButton();
        butCancel.setPreferredSize(new Dimension(60, 60));
        butCancel.setBackground(new Color(233, 139, 76));
        butCancel.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                onCancel();
            }
        });
        JPanel buttonFlowPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        buttonFlowPanel.setOpaque(false);
        buttonFlowPanel.add(butOk);
        buttonFlowPanel.add(butCancel);
        buttonPanel.setOpaque(false);
        buttonPanel.add(buttonFlowPanel);
        mainPanel.add(buttonPanel);
        addWindowListener(new WindowAdapter(){
            @Override
            public void windowClosing(WindowEvent e) {
                onCancel();
            }
        });
        setContentPane(mainPanel);
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        setResizable(false);
        setSize(new Dimension(WIDTH, HEIGHT));
        setModal(true);
        setTitle("Новый анализ ИФА");
        setLocationRelativeTo(owner);
    }
 
    public void showPatientName(JTable table){
//        scrinnPanels.getFIOField().setText(scrinnPanels.showPatientFIO(table));
 
    }
 
    private void onOK() {
// add your code here
        dispose();
    }
 
    private void onCancel() {
// add your code here if necessary
        dispose();
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.03.2014, 10:29
Ответы с готовыми решениями:

Если Button 1 и Button 2 нажаты - Button 3 стала активной, как?
Проверка если Button 1 и Button 2 нажаты - Button 3 стала активной Причем нужно чтобы это срабатывало только после того как вторая...

JFrame + Jdialog
Имеется JFrame и JDialog. При нажатии определенной кнопки в JDialog, должна создаться кнопка в JFrame. Делаю как-то так в JDialog: gui...

JDialog не отображается
Код не работает именно в netbeans. Файл: myDialog.java // ... // ... public class myDialog extends JDialog { myDialog() ...

5
9 / 9 / 3
Регистрация: 29.05.2011
Сообщений: 74
26.03.2014, 20:44
Я думаю, причина сего в том, что кнопка "отжимаеться" после выполнения функции. У меня такое бывало, когда в зацикливался алгоритм. Пока не закроешь диалог будет кнопка нажата
1
0 / 0 / 2
Регистрация: 28.09.2012
Сообщений: 161
27.03.2014, 12:58  [ТС]
Я нашел причину такого поведения кнопки. Дело было в модальности диалогового окна. Когда в методе setModal() указал - false, все работает нормально. Но мне нужно, что б окно было модальным. Может есть у кого-то совет, подскажите.
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
27.03.2014, 13:29
что-то типа
myButton.setPressed(false);
до показа диалога на экран не прокатит?
0
237 / 236 / 72
Регистрация: 02.07.2013
Сообщений: 881
27.03.2014, 13:39
Лучший ответ Сообщение было отмечено neger как решение

Решение

можно сделать мауслисенер
и запускать диалог НЕ в mousePressed, а в методе mouseClicked

и кнопка будет отжиматься
1
0 / 0 / 2
Регистрация: 28.09.2012
Сообщений: 161
28.03.2014, 00:47  [ТС]
Всем большое спасибо за ответы.
Решение проблемы вот такое:
нажатие кнопки было через ActionListener(ActionPerformed) поменял на MouseListener(MouseClick) и все начало работать так как нужно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2014, 00:47
Помогаю со студенческими работами здесь

Ошибка в использовании JDialog
Подскажите, пожалуйста, как исправить. Главная форма запрашивает у пользователя количество новых дочерних окон и открывает их. Все...

Не отображается Jlist в Jdialog
Уже не знаю, что делать. В общем, я хочу, чтобы человек ввёл имя нового пользователя, тот записался в arraylist, затем хочу этот arraylist...

JDialog в редакторе форм Netbeans
Родилась весьма глупая проблема: в форме JFrame есть button, по его нажатию выскакивает JDialog, сконструированный в редакторе форм. В...

Событие нажатия кнопок в JDialog
Имеется такой JDialog final JDialog dialog = new JDialog(frame, "Введите данные", true); dialog.setContentPane(optionPane);...

При вызове JDialog отображается не по центру
Здравствуйте! При вызове нажатием кнопки в главном окне программы вызывается JDialog окно. Но несмотря на setLocationRelativeTo(null)...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru