Java Swing - пример JOptionPane showInputDialog
Это обзор методаshowInputDialog()
классаJOptionPane
. С помощью этого метода мы можем запросить ввод данных пользователем при настройке нашего диалогового окна. showConfirmDialog
возвращает либоString
, либоObject
и может быть вызван с использованием следующих комбинаций параметров:
Object (returns String)
- показывает диалоговое окно с вопросом-сообщением, запрашивающее ввод от пользователя.
Object, Object (returns String)
- показывает диалоговое окно с вопросом-сообщением, запрашивающее ввод от пользователя с инициализированным вводимым значением.
Component, Object (returns String)
- показывает диалоговое окно с вопросом-сообщением, запрашивающее ввод от пользователя. Возвращает входные данные в виде строки. Компонент определяет фрейм, в котором отображается диалоговое окно; если ноль, или если parentComponent не имеет Frame, используется Frame по умолчанию.
Component, Object, Object (returns String)
- То же, что и выше. Единственное отличие состоит в том, что поле ввода имеет начальное значение, установленное с помощью последнего параметра Object.
Component, Object, String, int (returns String)
- показывает диалог, запрашивающий ввод от пользователя. Диалог имеет заголовок, установленный с помощью параметра String, и MessageType, заданный с помощью параметра int. Различные типы сообщений дляJOptionPane
:
-
СООБЩЕНИЕ ОБ ОШИБКЕ
-
INFORMATION_MESSAGE
-
ПРЕДУПРЕЖДЕНИЕ
-
QUESTION_MESSAGE
-
PLAIN_MESSAGE
Component, Object, String, int, Icon, Object[], Object (returns Object)
- Предлагает пользователю ввести данные в диалоговом окне блокировки, в котором можно указать начальный выбор, возможные варианты выбора и все другие параметры. Значок (если не ноль) отображается внутри диалогового окна и переопределяет значок MessageType по умолчанию.
1. Объект -The simplest way to get user input
Пример диалогового окна с вопросом-сообщением, которое вводит пользователь какString
:
SimpleInputDialog1.java
package com.example.inputDialog; import javax.swing.JOptionPane; public class SimpleInputDialog1 { public static void main(String[] args){ String m = JOptionPane.showInputDialog("Anyone there?"); System.out.println(m); } }
Выход:
Когда вы вводите «Hellooooo !!!!» в поле ввода и нажимаете «OK»
Hellooooo!!!!
2. Объект и объект -Setting an initial value over the input
Пример диалога с вопросом-сообщением с начальным значением, которое вводится пользователем какString
:
SimpleInputDialog2.java
package com.example.inputDialog; import javax.swing.JOptionPane; public class SimpleInputDialog2 { public static void main(String[] args){ String m = JOptionPane.showInputDialog("Anyone there?", 42); System.out.println(m); } }
Выход:
3. Компонент и объект -Setting the dialog in a parent Component
Если мы установимComponent
равным нулю, результат будет таким же, как и с номером 1. В этом примере мы создадимJFrame
, чтобы вставить наш диалог. Рамка закрывается, если пользователь не введет что-то в поле:
InputDialogInFrame.java
package com.example.inputDialog; import java.awt.Color; import javax.swing.JFrame; import javax.swing.JOptionPane; public class InputDialogInFrame extends JFrame{ public InputDialogInFrame() { getContentPane().setBackground(Color.DARK_GRAY); setTitle("Input Dialog in Frame"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); setResizable(false); setSize(400, 300); getContentPane().setLayout(null); } private void closeIt(){ this.getContentPane().setVisible(false); this.dispose(); } public static void main(String[] args){ InputDialogInFrame frame = new InputDialogInFrame(); String m = JOptionPane.showInputDialog(frame, "Anyone there?"); if(m.isEmpty()){ frame.closeIt(); } } }
Выход:
4. Компонент, объект и объект -Setting the dialog in a parent Component with an initial value
Если мы установимComponent
равным нулю, результат будет таким же, как и с номером 2. Для этого примера мы немного изменим код с номера 3:
InputDialogInFrame.java
package com.example.inputDialog; import java.awt.Color; import javax.swing.JFrame; import javax.swing.JOptionPane; public class InputDialogInFrame extends JFrame{ public InputDialogInFrame() { getContentPane().setBackground(Color.DARK_GRAY); setTitle("Input Dialog in Frame"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); setResizable(false); setSize(400, 300); getContentPane().setLayout(null); } private void closeIt(){ this.getContentPane().setVisible(false); this.dispose(); } public static void main(String[] args){ InputDialogInFrame frame = new InputDialogInFrame(); String m = JOptionPane.showInputDialog(frame, "Anyone there?", 42); if(m.isEmpty() || m.equals("42")){ frame.closeIt(); } } }
Выход:
5. Компонент, объект, строка и целое число -Let us give our input dialog a title and choose the MessageType
Пример информационного сообщения с использованием значка по умолчанию черезJOptionPane.INFORMATION_MESSAGE
:
SimpleInputDialog5.java
package com.example.inputDialog; import javax.swing.JOptionPane; public class SimpleInputDialog5 { public static void main(String[] args){ String m = JOptionPane.showInputDialog(null, "Broccoli is tasty!", "Green dinner", JOptionPane.INFORMATION_MESSAGE); System.out.println(m); } }
Выход:
6. Компонент, Объект, Строка, int, Значок, Объект [] и Объект -Input dialog with predefined options
6.1 In this example we provide the user with a set of options to choose from. Различные параметры отображаются в виде раскрывающегося меню с выбранным начальным значением:
InputDialog6a.java
package com.example.inputDialog; import javax.swing.ImageIcon; import javax.swing.JOptionPane; public class InputDialog6a { public static void main(String[] args) { String[] options = {"I adore turtles", "Yes", "Maybe", "Urm...", "No", "Hate them"}; ImageIcon icon = new ImageIcon("src/images/turtle32.png"); String n = (String)JOptionPane.showInputDialog(null, "Do you like turtles??", "I like turtles", JOptionPane.QUESTION_MESSAGE, icon, options, options[2]); System.out.println(n); } }
Выход:
Когда вы выбираете опцию «Я обожаю черепах» и нажимаете «ОК»
I adore turtles
6.2 An example using array of Integers:
InputDialog6b.java
package com.example.inputDialog; import javax.swing.JOptionPane; public class InputDialog6b { public static void main(String[] args) { Integer[] options = {2, 3, 5, 7, 9, 11}; int n = (Integer)JOptionPane.showInputDialog(null, "Pick a number that is not prime:", "Prime numbers", JOptionPane.QUESTION_MESSAGE, null, options, options[2]); System.out.println(n); } }
Выход:
6.3 An example where we take advantage of the dynamics the Object array
and the Object return type of the method:
InputDialog6c.java
package com.example.inputDialog; import javax.swing.ImageIcon; import javax.swing.JOptionPane; public class InputDialog6c { public static void main(String[] args) { Object[] options = {2, "No", 5.6, true}; Object l = JOptionPane.showInputDialog(null, "Just pick something already!", "Mix & Match", JOptionPane.ERROR_MESSAGE, null, options, options[0]); if(l instanceof Integer){ System.out.println("You picked an Integer!"); }else if(l instanceof String){ System.out.println("You picked a String!"); }else if(l instanceof Double){ System.out.println("You picked a Double!"); }else if(l instanceof Boolean){ System.out.println("You picked a Boolean!"); } } }
Выход:
Когда выбрано «2» и пользователь нажимает «ОК»:
You picked an Integer!
Когда выбрано «Нет» и пользователь нажимает «ОК»:
You picked a String!
Когда выбран «5.6» и пользователь нажимает «ОК»:
You picked a Double!
Когда выбрано «true» и пользователь нажимает «OK»:
You picked a Boolean!
7. Более сложный пример
Во всех предыдущих примерахString
использовался вместоObject
; в этом примере мы будем использоватьJPanel
вместоObject
. JPanel
настраивается, и к нему добавляетсяJLabel
. Мы также манипулируем размеромOptionPane
, используя вызовUIManager
.
InputDialogPanel.java
package com.example.inputDialog; import java.awt.Color; import java.awt.Dimension; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.UIManager; import javax.swing.JLabel; import java.awt.Font; import javax.swing.SwingConstants; public class InputDialogPanel { public static void main(String[] args) { JPanel panel = new JPanel(); panel.setBackground(new Color(0, 0, 0)); panel.setSize(new Dimension(250, 32)); panel.setLayout(null); JLabel label = new JLabel("It's your choice! :)"); label.setForeground(new Color(255, 255, 0)); label.setHorizontalAlignment(SwingConstants.CENTER); label.setFont(new Font("Arial", Font.BOLD, 11)); label.setBounds(0, 0, 250, 32); panel.add(label); UIManager.put("OptionPane.minimumSize",new Dimension(270, 120)); Object[] options = {2, "No", 5.6, true}; Object l = JOptionPane.showInputDialog(null, panel, "Mix & Match", JOptionPane.PLAIN_MESSAGE, null, options, options[3]); if(l instanceof Integer){ System.out.println("You picked an Integer!"); }else if(l instanceof String){ System.out.println("You picked a String!"); }else if(l instanceof Double){ System.out.println("You picked a Double!"); }else if(l instanceof Boolean){ System.out.println("You picked a Boolean!"); } } }
Выход: