Java Swing - Exemple JOptionPane showInputDialog
Ceci est un examen de la méthodeshowInputDialog()
de la classeJOptionPane
. Avec cette méthode, nous pouvons inviter l'utilisateur à entrer tout en personnalisant notre fenêtre de dialogue. LeshowConfirmDialog
renvoie soitString
soitObject
et peut être appelé à l'aide des combinaisons de paramètres suivantes:
Object (returns String)
- Affiche une boîte de dialogue question-message demandant une entrée à l'utilisateur.
Object, Object (returns String)
- Affiche une boîte de dialogue question-message demandant une entrée à l'utilisateur avec la valeur d'entrée initialisée.
Component, Object (returns String)
- Affiche une boîte de dialogue question-message demandant une entrée à l'utilisateur. Renvoie l'entrée sous forme de chaîne. Le composant détermine le cadre dans lequel la boîte de dialogue est affichée; si null, ou si le parentComponent n'a pas de Frame, un Frame par défaut est utilisé.
Component, Object, Object (returns String)
- Identique à ci-dessus. La seule différence est que le champ de saisie a une valeur initiale définie via le dernier paramètre Object.
Component, Object, String, int (returns String)
- Affiche une boîte de dialogue demandant une entrée à l'utilisateur. La boîte de dialogue a un titre défini via le paramètre String et un MessageType défini via le paramètre int. Les différents MessageTypes pourJOptionPane
sont:
-
MESSAGE D'ERREUR
-
INFORMATION_MESSAGE
-
MESSAGE D'ALERTE
-
QUESTION_MESSAGE
-
PLAIN_MESSAGE
Component, Object, String, int, Icon, Object[], Object (returns Object)
- Invite l'utilisateur à entrer dans une boîte de dialogue de blocage où la sélection initiale, les sélections possibles et toutes les autres options peuvent être spécifiées. L'icône (si non nulle) s'affiche dans la boîte de dialogue et remplace l'icône par défaut MessageType.
1. Objet -The simplest way to get user input
Exemple de boîte de dialogue question-message qui obtient une entrée utilisateur en tant queString
:
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); } }
Sortie:
Lorsque vous tapez "Hellooooo !!!!" dans le champ de saisie et cliquez sur "OK"
Hellooooo!!!!
2. Objet et objet -Setting an initial value over the input
Exemple de boîte de dialogue question-message avec une valeur initiale qui obtient une entrée utilisateur sous la formeString
:
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); } }
Sortie:
3. Composant et objet -Setting the dialog in a parent Component
Si nous définissons lesComponent
sur null, le résultat sera le même avec le numéro 1. Pour cet exemple, nous allons créer unJFrame
dans lequel placer notre boîte de dialogue. Le cadre se ferme sauf si l'utilisateur tape quelque chose dans le champ:
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(); } } }
Sortie:
4. Composant, objet et objet -Setting the dialog in a parent Component with an initial value
Si nous définissons lesComponent
sur null, le résultat sera le même avec le numéro 2. Pour cet exemple, nous changerons légèrement le code du numéro 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(); } } }
Sortie:
5. Composant, objet, chaîne & int -Let us give our input dialog a title and choose the MessageType
Un exemple de message d'information utilisant l'icône par défaut viaJOptionPane.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); } }
Sortie:
6. Composant, objet, chaîne, entier, icône, objet [] et objet -Input dialog with predefined options
6.1 In this example we provide the user with a set of options to choose from. Les différentes options apparaissent sous la forme d'un menu déroulant avec une valeur initiale sélectionnée:
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); } }
Sortie:
Lorsque vous sélectionnez l'option «J'adore les tortues» et cliquez sur «OK»
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); } }
Sortie:
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!"); } } }
Sortie:
Lorsque «2» est sélectionné et que l'utilisateur clique sur «OK»:
You picked an Integer!
Lorsque «Non» est sélectionné et que l'utilisateur clique sur «OK»:
You picked a String!
Lorsque «5.6» est sélectionné et que l'utilisateur clique sur «OK»:
You picked a Double!
Lorsque "true" est sélectionné et que l'utilisateur clique sur "OK":
You picked a Boolean!
7. Un exemple plus avancé
Sur tous les exemples précédents, unString
a été utilisé à la place deObject
; pour cet exemple, nous utiliserons unJPanel
à la place desObject
. LeJPanel
est personnalisé et a unJLabel
ajouté. Nous manipulons également la taille desOptionPane
en utilisant un appel à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!"); } } }
Sortie: