JOptionPane manejo de aceptar, cancelar y el botón x

No es un problema que me estoy enfrentando con mi JOptionPane
si no me la clave en cualquier cosa,no importa lo que yo pulse(aceptar,cancelar o el botón x(la parte superior derecha en el botón de JOptionPane)), se le pedirá mí hasta que la tecla I en un valor positivo. pero yo sólo quiero el mensaje para que sucederá cuando pulsa aceptar.

Si hago clic en cancelar o el botón x(la parte superior derecha en el botón de JOptionPane), se va a cerrar la JOptionPane

¿Cómo puedo hacer esto?

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);
    }
}
  • ¿quieres cerrar la pupup una vez que cancelar o x se pulsa el botón?
  • sí quiero cerrar el pop-up una vez que cancelar o x se pulsa el botón . a lo que me refiero es el JoptionPane mantendrá a estallar si no me clave en los valores , haga clic en cancelar,aceptar o el botón x
  • así que quieres decir pop-up hasta cualquier valor positivo es introducido no importa dónde aceptar, cancelar y x clic en el botón?
  • Tienen una lectura de la JavaDocs, es claro que los estados los valores de retorno
  • mi opción y que me haga saber si usted está buscando para esto o no?
  • }while(!isPositive); Dar al usuario una JSpinner para seleccionar un valor. El uso de un SpinnerNumberModel a construir..

InformationsquelleAutor user3879568 | 2014-07-26

3 Kommentare

  1. 4

    El enfoque básico de este puede verse como les he mostrado a continuación:

    Actualizado después de @MadProgrammer comentario.

    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");
            }
        }
    }
    • No JOptionPane.showOptionPane volver an integer indicating the option chosen by the user, or CLOSED_OPTION if the user closed the dialog, lo que significa que n == 0 sería más preciso, como JOptionPane.YES_OPTION podría ser definido como cualquier cosa…?
    • Estás en lo correcto. Gracias.
    • No, no dependen de las constantes de JOptionPane, usted no sabe lo que los valores que se establecen a, y se puede cambiar entre las implementaciones/versiones de la JVM, que es el punto. En su lugar, usted debe utilizar el 0 o el 1 que representa el conocido índice de los valores de las opciones de la matriz…
    • Pero no importa, si cambian algo en los valores de JOptionPane constantes, si yo sólo uso JOptionPane constante para Object initialValue parámetro en el showOptionDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue) método.
    • En este caso, sí, porque showOptionPane devuelve el ÍNDICE de la OPCIÓN de las OPCIONES de la matriz, no una de las constantes. Esto significa, en este contexto, si el usuario selecciona «Sí», el valor de retorno es «0», si hey, seleccione «No», se devolverá a «1». Es sólo una casualidad que las constantes de pasar a ser el mismo y usted no debe confiar en este estado el hecho, pero en lugar de confiar en lo que usted sabe. La única constante que usted puede confiar en, en este ejemplo, es el CLOSE_OPTION, porque la API explícitamente dice que la devuelve
    • Ok, pero incluso si la opción de índices que va a cambiar y va a ser para SÍ=5, y=2, que if (n == JOption.OPTION) declaración de «decidir», opción que fue elegido.
    • No, no porque la devolución será 0 o 1 así n == JOptionPane.YES_OPTION ahora se n == 5, que SIEMPRE será false…a ver…
    • Aaaah… Ok, lo tengo 🙂 Todo debido a la «estática» de los índices de Object[] options y los posibles cambios futuros en JOptionPane.OPTION constantes. Ok, ahora veo 🙂 Gracias por Su paciencia.
    • Yo iba a sugerir también tratando de cambiar el orden de las opciones a algo como {"No", "Yes"} como una demostración 😉

  2. 1
    JoptionPane#showInputDialog returns user's input, or null meaning the user canceled the input.

    Así que en lugar de directamente a analizar el valor de retorno. En primer lugar comprobar si es null (el Usuario Cancelado) no haga nada si no es null, a continuación, analizar el valor entero

  3. 1

    Simplemente mueva el código en try bloque y no hay necesidad de utilizar cualquier marca solo break el bucle infinito positivo una vez se introduce el número.

    Código de ejemplo:

    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 ***");
            }
        }
    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea