2014-07-26 5 views
1

Il ya un problème que je suis confronté avec mon JOptionPane si je ne saisis rien, peu importe ce que j'appuie (le ok, annuler ou le bouton x (le bouton en haut à droite dans le JOptionPane)), il m'indiquera jusqu'à la touche I dans une valeur positive. mais je veux seulement que l'invite se produise quand j'ai appuyé sur OK.JOptionPane gérer ok, annuler et x bouton

Si je clique sur résilie ou sur la touche x (haut bouton droit dans le JOptionPane), il fermera la JOptionPane

Comment puis-je faire cela?

import javax.swing.JOptionPane; 

public class OptionPane { 
    public static void main(final String[] args) { 
     int value = 0; 
     boolean isPositive = false , isNumeric = true; 
     do { 
      try { 
       value = Integer.parseInt(JOptionPane.showInputDialog(null, 
        "Enter value?", null)); 
      } catch (NumberFormatException e) { 
       System.out.println("*** Please enter an integer ***"); 
       isNumeric = false; 
      } 

      if(isNumeric) { 
       if(value <= 0) { 
        System.out.println("value cannot be 0 or negative"); 
       } 

       else { 
        System.out.println("value is positive"); 
        isPositive = true; 
       } 
      } 
     }while(!isPositive); 
    } 
} 
+0

voulez-vous fermer la pupille une fois que vous avez appuyé sur le bouton annuler ou x? – Braj

+0

@Braj oui Je souhaite fermer la fenêtre une fois que vous avez appuyé sur la touche Annuler ou sur la touche x. ce que je veux dire est le JoptionPane continuera à sauter si je ne saisis aucune valeur, cliquez sur Annuler, OK ou le bouton x – user3879568

+0

de sorte que vous voulez dire pop-up jusqu'à ce que toute valeur positive est entrée, peu importe où ok, annuler et x est cliqué? – Braj

Répondre

3

L'approche de base pour cela peut regarder comme je l'ai montré ci-dessous:

Mise à jour après @MadProgrammer commentaire.

import javax.swing.JFrame; 
import javax.swing.JOptionPane; 

public class DemoJOption { 
    public static void main(String args[]) { 
     int n = JOptionPane.showOptionDialog(new JFrame(), "Message", 
     "Title", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, 
     null, new Object[] {"Yes", "No"}, JOptionPane.YES_OPTION); 

     if (n == JOptionPane.YES_OPTION) { 
      System.out.println("Yes"); 
     } else if (n == JOptionPane.NO_OPTION) { 
      System.out.println("No"); 
     } else if (n == JOptionPane.CLOSED_OPTION) { 
      System.out.println("Closed by hitting the cross"); 
     } 
    } 
} 
+2

'JOptionPane.showOptionPane' ne retourne pas' un entier indiquant l'option choisie par l'utilisateur, ou CLOSED_OPTION si l'utilisateur a fermé le dialogue', ce qui signifie que 'n == 0' serait plus précis, car 'JOptionPane.YES_OPTION' pourrait être défini comme n'importe quoi ...? – MadProgrammer

+0

Vous avez raison. Je vous remercie. – bluevoxel

+0

Non, ne comptez pas sur les constantes de JOptionPane, vous ne savez pas à quelles valeurs elles sont définies et elles pourraient changer entre les implémentations/versions de la JVM, c'est le point. Au lieu de cela, vous devriez utiliser 0 ou 1 qui représente les valeurs d'index connues du tableau d'options ... – MadProgrammer

1

Il suffit de déplacer le code dans try bloc et il n'y a pas besoin d'utiliser un drapeau juste break la boucle infinie lorsque nombre positif est entré.

Exemple de code:

public static void main(final String[] args) { 
    int value = 0; 
    while (true) { 
     try { 
      value = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter value?", null)); 

      if (value <= 0) { 
       System.out.println("value cannot be 0 or negative"); 
      } else { 
       System.out.println("value is positive"); 
       break; 
      } 
     } catch (NumberFormatException e) { 
      System.out.println("*** Please enter an integer ***"); 
     } 
    } 
} 
1
JoptionPane#showInputDialog returns user's input, or null meaning the user canceled the input. 

Ainsi, au lieu de l'analyse syntaxique directement la valeur de retour. Vérifiez d'abord si elle est null (Utilisateur annulé) alors ne faites rien si ce n'est null, puis analysez pour la valeur entière

Questions connexes