Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/57: Рейтинг темы: голосов - 57, средняя оценка - 4.53
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208

Настройка JOptionPane.showInputDialog()

09.05.2013, 22:59. Показов 10529. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, есть ли такой конструктор или как настроить .showInputDialog(), чтобы в нем было два поля ввода, а не один. По крайней мере я не нашел в API такого конструктора. Или подскажите как унаследовав от JOptionPane, получить такой диалог. Или любой другой способ. Писать свой фрэйм - не вариант.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.05.2013, 22:59
Ответы с готовыми решениями:

JOptionPane.showInputDialog
Никак не могу понять как действует JOptionPane.showInputDialog На JLabel устанволен MouseListener. Пишу в MouseListener код. if...

JOptionPane.showInputDialog что он возращает
У меня вопрос может показаться странный, но все же: что возвращает JOptionPane.showInputDialog(), если заполненное поле оставить пустым? ...

Обработчик кнопок в JOptionPane showInputDialog
Подскажите, пожалуйста, как можно организовать обработку кнопок "ОК" и "Cancel", поскольку при нажатию и той, и другой происходит...

5
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
10.05.2013, 00:04
дето так

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
package swinge;
 
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
 
class CustomDialog extends JDialog
        implements ActionListener,
        PropertyChangeListener {
 
    static class Demo {
 
        public static void main(String[] args) {
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    JFrame frame = new JFrame("DialogDemo");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(new BorderLayout());
                    JButton dlg = new JButton("show dialog");
                    frame.add(dlg);
                    final CustomDialog customDialog = new CustomDialog(frame, "geisel");
                    customDialog.pack();
                    customDialog.setLocationRelativeTo(frame);
                    dlg.addMouseListener(new MouseListener() {
                        @Override
                        public void mouseClicked(MouseEvent e) {
                            customDialog.setVisible(true);
 
                        }
 
                        @Override
                        public void mousePressed(MouseEvent e) {
                        }
 
                        @Override
                        public void mouseReleased(MouseEvent e) {
                        }
 
                        @Override
                        public void mouseEntered(MouseEvent e) {
                        }
 
                        @Override
                        public void mouseExited(MouseEvent e) {
                        }
                    });
                    frame.setVisible(true);
                    frame.pack();
 
                }
            });
        }
    }
    private String typedText = null;
    private JTextField textField1;
    private JTextField textField2;
    private String magicWord;
    private JOptionPane optionPane;
    private String btnString1 = "Enter";
    private String btnString2 = "Cancel";
 
    /**
     * Returns null if the typed string was invalid; otherwise, returns the string as the user entered it.
     */
    public String getValidatedText() {
        return typedText;
    }
 
    /**
     * Creates the reusable dialog.
     */
    public CustomDialog(Frame aFrame, String aWord) {
        super(aFrame, true);
 
        magicWord = aWord.toUpperCase();
        setTitle("Quiz");
 
        textField1 = new JTextField(10);
        textField2 = new JTextField(10);
 
        //Create an array of the text and components to be displayed.
        String msgString1 = "What was Dr. SEUSS's real last name?";
        String msgString2 = "(The answer is \"" + magicWord
                + "\".)";
        Object[] array = {msgString1, msgString2, textField1, textField2};
 
        //Create an array specifying the number of dialog buttons
        //and their text.
        Object[] options = {btnString1, btnString2};
 
        //Create the JOptionPane.
        optionPane = new JOptionPane(array,
                JOptionPane.QUESTION_MESSAGE,
                JOptionPane.YES_NO_OPTION,
                null,
                options,
                options[0]);
 
        //Make this dialog display it.
        setContentPane(optionPane);
 
        //Handle window closing correctly.
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                /*
                 * Instead of directly closing the window,
                 * we're going to change the JOptionPane's
                 * value property.
                 */
                optionPane.setValue(new Integer(
                        JOptionPane.CLOSED_OPTION));
            }
        });
 
        //Ensure the text field always gets the first focus.
        addComponentListener(new ComponentAdapter() {
            public void componentShown(ComponentEvent ce) {
                textField1.requestFocusInWindow();
            }
        });
 
        addComponentListener(new ComponentAdapter() {
            public void componentShown(ComponentEvent ce) {
                textField2.requestFocusInWindow();
            }
        });
 
        //Register an event handler that puts the text into the option pane.
        textField1.addActionListener(this);
        textField2.addActionListener(this);
 
        //Register an event handler that reacts to option pane state changes.
        optionPane.addPropertyChangeListener(this);
    }
 
    /**
     * This method handles events for the text field.
     */
    public void actionPerformed(ActionEvent e) {
        optionPane.setValue(btnString1);
    }
 
    /**
     * This method reacts to state changes in the option pane.
     */
    public void propertyChange(PropertyChangeEvent e) {
        String prop = e.getPropertyName();
 
        if (isVisible()
                && (e.getSource() == optionPane)
                && (JOptionPane.VALUE_PROPERTY.equals(prop)
                || JOptionPane.INPUT_VALUE_PROPERTY.equals(prop))) {
            Object value = optionPane.getValue();
 
            if (value == JOptionPane.UNINITIALIZED_VALUE) {
                //ignore reset
                return;
            }
 
            //Reset the JOptionPane's value.
            //If you don't do this, then if the user
            //presses the same button next time, no
            //property change event will be fired.
            optionPane.setValue(
                    JOptionPane.UNINITIALIZED_VALUE);
 
            if (btnString1.equals(value)) {
                typedText = textField1.getText();
                String ucText = typedText.toUpperCase();
                if (magicWord.equals(ucText)) {
                    //we're done; clear and dismiss the dialog
                    clearAndHide();
                } else {
                    //text was invalid
                    textField1.selectAll();
                    JOptionPane.showMessageDialog(
                            CustomDialog.this,
                            "Sorry, \"" + typedText + "\" "
                            + "isn't a valid response.\n"
                            + "Please enter "
                            + magicWord + ".",
                            "Try again",
                            JOptionPane.ERROR_MESSAGE);
                    typedText = null;
                    textField1.requestFocusInWindow();
                }
            } else { //user closed dialog or clicked cancel
                typedText = null;
                clearAndHide();
            }
        }
    }
 
    /**
     * This method clears the dialog and hides it.
     */
    public void clearAndHide() {
        textField1.setText(null);
        textField2.setText(null);
        setVisible(false);
    }
}
1
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
10.05.2013, 01:10  [ТС]
mutagen, появляется JDialog. В принципе все работает. Но как сделать лабэли справа(напротив) каждого JTextField? Ведь конструктор JOptionPane выстраивает все компоненты вертикально.

Добавлено через 32 секунды
Или я наверное много прошу?

Добавлено через 28 минут
Аааа знаю, нужно поиграться с менеджером расположения. "Эффектные пользовательские интерфейсы" помогут.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
10.05.2013, 01:41
Цитата Сообщение от animator404 Посмотреть сообщение
Аааа знаю, нужно поиграться с менеджером расположения. "Эффектные пользовательские интерфейсы" помогут.
точно
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
14.05.2013, 17:42
Цитата Сообщение от animator404 Посмотреть сообщение
Подскажите, есть ли такой конструктор или как настроить .showInputDialog(), чтобы в нем было два поля ввода, а не один. По крайней мере я не нашел в API такого конструктора. Или подскажите как унаследовав от JOptionPane, получить такой диалог. Или любой другой способ. Писать свой фрэйм - не вариант.
Нужного эффекта можно добиться с помощью showConfirmDialog и маленькой собственной формы ввода с нужными полями:

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
package ru.skipy.tests;
 
import javax.swing.*;
import java.awt.*;
 
/**
 * InputDialogTest
 *
 * @author Eugene Matyushkin aka Skipy
 * @since 14.05.13
 */
public class InputDialogTest {
 
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setSize(300,200);
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        InputPanel ip = new InputPanel();
        int res = JOptionPane.showConfirmDialog(f, ip, "Enter data",
                JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
        if (res == JOptionPane.OK_OPTION){
            System.out.println("Data entered: first name="+ip.getFirstName()+
                    ", last name="+ip.getLastName());
        } else {
            System.out.println("Input Canceled");
        }
    }
 
    static class InputPanel extends JPanel {
 
        private JTextField firstName;
        private JTextField lastName;
 
        public InputPanel() {
            super(new GridBagLayout());
            JLabel lblFN = new JLabel("First name:");
            JLabel lblLN = new JLabel("Last name:");
            firstName = new JTextField(20);
            lastName = new JTextField(20);
            add(lblFN, new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.WEST,
                    GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 5), 0, 0));
            add(firstName, new GridBagConstraints(1, 0, 1, 1, 1, 0, GridBagConstraints.WEST,
                    GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
            add(lblLN, new GridBagConstraints(0, 1, 1, 1, 0, 0, GridBagConstraints.WEST,
                    GridBagConstraints.HORIZONTAL, new Insets(5, 0, 0, 5), 0, 0));
            add(lastName, new GridBagConstraints(1, 1, 1, 1, 1, 0, GridBagConstraints.WEST,
                    GridBagConstraints.HORIZONTAL, new Insets(5, 0, 0, 0), 0, 0));
        }
 
        public String getFirstName(){
            return firstName.getText();
        }
 
        public String getLastName(){
            return lastName.getText();
        }
    }
}
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
14.05.2013, 17:48  [ТС]
Skipy, спасибо. Я добился того же результата, но дольшим путом. Но идея та же что и у вас - создать панель с уже расположенными компонентами и добавить как параметр в showConfirmDialog.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.05.2013, 17:48
Помогаю со студенческими работами здесь

Обработка событий. JoptionPane.showMessageDialog(...) || JOptionPane.showOptionDialog(...) || JDialog
Ситуация со SWING. Есть фрейм (окно для заполнения юзером формы) - это один обьект одного класса. По нажатию кнопки на этой форме создается...

Луп на showInputDialog
public final String getName1() { String sName = JOptionPane.showInputDialog("Please enter the name of Player 1:", "Player 1");...

Как запретить закрытие showInputDialog на крестик или cancel?
имею код while(true) { String name = JOptionPane.showInputDialog("Enter you name: "); if(name.length() > 0) { ...

JOptionPane
В общем. Я немного затупил. Я пишу конвертер валют. Пользователь выбирает, какая валюта ему нужна, и какая валюта у него есть. Вот...

KeyEvent и JOptionPane
Добрый день. На панели JPanel расположены два JTextField с обработкой нажатия клавиши Enter (напр., смена фокуса). Если поле ввода...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru