JOptionPane y lectura de números enteros – Principiante en Java

Tengo actualmente el código que lee el mes, la fecha y el año en que un usuario entra en una línea (separados por espacios). Aquí está el código.

Scanner input = new Scanner(System.in);
int day = 0;
int month = 0;
int year = 0;

System.out.printf("enter the month, date, and year(a 2 numbered year). Put a space between the month, day, and year");
month = input.nextInt();
day = input.nextInt();
year = input.nextInt();

Esto funciona bien, la segunda parte es mostrar un mensaje, si mes * día == año, entonces es un número mágico, si no, entonces no es un número mágico. Tiene que ser muestra en un cuadro de diálogo. aquí está mi código, y está funcionando muy bien.

  if((day * month) == year)
  {
    String message = String.format("%s", "The date you entered is MAGIC!");//If the day * month equals the year, then it is a magic number
    JOptionPane.showMessageDialog(null, message);
  }
  if((day * month) != year)
  {  
    String message = String.format("%s", "The date you entered is NOT MAGIC!");//If the day * month does not equal the year, it is not a magic number
    JOptionPane.showMessageDialog(null, message);
  }

Mi pregunta es!! ¿Cómo puedo obtener un cuadro de diálogo para tomar las entradas del mes, la fecha y el año en una línea de la forma en que funciona en la consola. Estoy trabajando en DrJava, y el capítulo del libro que estoy en el no me ayuda con este uso específico. Cualquier ayuda sería genial. Gracias a todos!

3 Kommentare

  1. 2

    Usted puede hacer uso de la siguiente para recibir la entrada del usuario

    String word = JOptionPane.showInputDialog("Enter 3 int values");
    String[] vals = word.split("\\s+"); //split the sting by whitespaces accepts regex. 
    //vals[0] cast to int
    //convert string representation of number into actual int value
    int day = Integer.parseInt(vals[0]); //throws NumberFormatException
    //vals[1] cast to int
    //vals[2] cast to int

    split API de Java

    parseInt API de Java

    Java Regex Tutorial

    • Gracias por dar un poco de código. Parece estar funcionando, pero se puede hacer una explicación rápida de cómo. Necesito ayuda para la comprensión de la Cadena{} vals = palabra.split(«\\s+») y el parseInt métodos.
    • He actualizado la respuesta y añadió unos link que le dará más información.
    • Muchas gracias, estaba buscando en la API de ahora. Mirando por encima de mi tarea, creo que mi profesor era simplemente piden una salida del cuadro de diálogo, que yo era capaz de conseguir. Pero el aprendizaje que esto será útil en el futuro. Una vez más, gracias!
    • Me alegro de que la ayudó. Si cualquiera de las siguientes respuestas a resolver su problema, a continuación, aceptar la respuesta y cerrar la pregunta.
  2. 6

    Hay un número de maneras de abordar el problema en función de lo que finalmente es lo que se desea lograr.

    JOptionPane permite proporcionar Object como el mensaje. Si este mensaje es un String se le representa como es, sin embargo, si se trata de un Component de algún tipo, será simplemente se agrega al cuadro de diálogo. Esto hace que JOptionPane un muy potente API.

    JOptionPane y lectura de números enteros - Principiante en Java

    public class TestOptionPane07 {
    
        public static void main(String[] args) {
            new TestOptionPane07();
        }
    
        public TestOptionPane07() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    }
    
                    JTextField fldDay = new JTextField(3);
                    JTextField fldMonth = new JTextField(3);
                    JTextField fldYear = new JTextField(4);
                    JPanel message = new JPanel();
                    message.add(fldDay);
                    message.add(new JLabel("/"));
                    message.add(fldMonth);
                    message.add(new JLabel("/"));
                    message.add(fldYear);
    
                    int result = JOptionPane.showConfirmDialog(null, message, "Enter Date", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
                    if (result == JOptionPane.OK_OPTION) {
                        String sDay = fldDay.getText();
                        String sMonth = fldMonth.getText();
                        String sYear = fldYear.getText();
                        JOptionPane.showMessageDialog(null, "You enetered " + sDay + "/" + sMonth + "/" + sYear);
    
                        try {
                            int day = Integer.parseInt(sDay);
                            int month = Integer.parseInt(sMonth);
                            int year = Integer.parseInt(sYear);
                            JOptionPane.showMessageDialog(null, "You enetered " + day + "/" + month + "/" + year);
                        } catch (Exception e) {
                            JOptionPane.showMessageDialog(null, "The values you entered are invalid");
                        }
                    }
                }
            });
        }
    }

    Actualizado

    Si yo iba a usar algo como esto, yo también uso un DocumentFilter para asegurarse de que el usuario sólo podría escribir los valores válidos (ejemplos aquí)

    Pero también se puede usar JSpinners

    JOptionPane y lectura de números enteros - Principiante en Java

    O JComboBox

    JOptionPane y lectura de números enteros - Principiante en Java

    Dependiendo de qué es lo que quieres lograr…

    • Agradezco la ayuda grandemente! Si bien esta es mi 4ta semana en una clase de programación, no creo que esto es lo que mi profesor está esperando de nosotros todavía. Yo no estoy familiarizado con la escritura de mis propios métodos o programas que utilizan más de una clase. Pero yo no entiendo ahora la complejidad y de la utilidad que el JOptionPane ofrece.
    • Sí, yo creo que un montón de gente no reconocer cuán poderosa es algo así como JOptionPane puede ser en realidad. Encontrar la mejor solución para sus necesidades!
  3. 2

    Aquí un poco de código, todo lo que se describe en los comentarios:

    //import statements
    import javax.swing.JOptionPane;
    //main class
    public class Main {
        //main method
        public static void main(String[] args) {
            //get info
            try {
                Info info = new Info();
            } catch(Exception e) {
                System.err.println("Error! " + e.getMessage());
            }
            //do whatever with the info
        }
        //info class
        static class Info {
            //instance variables
            public int day, month, year;
            //constructor
            public Info() throws Exception {
                //get inputs
                String[] inputs = JOptionPane.showInputDialog(null, 
                    "Enter day, month, year").split(" ");
                //not the right size
                if(inputs.length != 3) {   
                    throw new Exception("Not enough infomation was given!");
                }
                //get values
                day = Integer.parseInt(inputs[0]);
                month = Integer.parseInt(inputs[1]);
                year = Integer.parseInt(inputs[2]);
            }
        }
    }

    Es de una elegante manera de notificar a usted, si algo salió mal, y todo lo que usted necesita es empaquetado en un conveniente objeto.

    • Agradezco la ayuda, mientras que mi profesor es exigir que todo sea en una clase, y en la principal, entiendo lo que estás diciendo. Sin duda útil para el futuro.
    • Me alegro de que podría ayudar.

Kommentieren Sie den Artikel

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

Pruebas en línea