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

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

09.05.2013, 22:59. Показов 10605. Ответов 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
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru