2011-07-25 3 views
1

Le code suivant montre une boîte de dialogue comme prévu, à l'exception de ne pas avoir des boutons:JOptionPane.showOptionDialog ne montre aucun bouton?

final JPasswordField passwdField = new JPasswordField(); 
    passwdField.setColumns(20); 
    final JComponent[] inputs = new JComponent[] { passwdField }; 
    int res = JOptionPane.showOptionDialog(null, "Enter Password", "Login", 
        JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, 
        null, inputs, ""); 

montre la boîte de dialogue suivante (Java 6.2 ?, Windows 7 64 bits):

enter image description here

Pourquoi n'y a-t-il pas de bouton OK/Annuler? (BTW, la boîte de dialogue n'est pas redimensionnable, donc je ne sais pas si elles sont juste en dehors du cadre visible)

(Aussi, appuyez sur Entrée ne ferme pas la boîte de dialogue, « x » ferme la boîte de dialogue)

Répondre

2

Votre problème est avec le tableau d'entrées. Lisez l'API et il vous dira que cela devrait être différent. J'utilise généralement un tableau de String, chaque String représentant un bouton String, ou parfois j'utilise un mélange d'objets, de composants de mixage et de chaînes. Pour exemple,

JPasswordField passField = new JPasswordField(10); 
    Object[] inputs = {passField, "OK", "Cancel"}; 
    int res = JOptionPane.showOptionDialog(null, "Enter Password", "Login", 
      JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, 
      null, inputs, ""); 
    if (res == 1) { 
    System.out.println("Password is: " + new String(passField.getPassword())); 
    } 
+0

assez juste. L'utilisation de 'passwdField' comme second paramètre fonctionne à la place. – Carsten

+0

@Carsten: l'ordre n'a pas d'importance tant que vous en tenez compte au moment de décider quoi faire du résultat retourné (ici détenu par 'res'). Je veux dire –

+0

second paramètre de 'showOptionDialog', pas le tableau' inputs' – Carsten

Questions connexes