2011-08-29 28 views
6

Estoy convirtiendo una aplicación de consola a una que usa Swing. Por el momento, quiero que mi programa haga algo similar a este .nextInt();, ¿cómo puedo lograrlo usando .getText(); o algo similar?¿Cómo esperar la entrada en un campo de texto?

En resumen;

¿Cómo puedo mantener la ejecución del programa hasta que el usuario haya ingresado algo en el campo de texto y presione enter.

+0

todavía no entiendo la pregunta - ¿qué quiere decir con "mantener la ejecución"? Aparte de eso: lee un tutorial básico de Swing y un api doc de campo de texto (pista: setAction podría valer la pena mirarlo :-) – kleopatra

Respuesta

5

Actualización: Así que desea esperar a que el usuario ingrese algo desde la GUI. Esto es posible, pero debe ser sincronizado ya que la GUI se ejecuta en otra secuencia.

lo tanto, los pasos son:

  1. crear un objeto "soporte" que deligates el resultado de GUI para "lógica" hilo
  2. la "lógica" hilo espera para la entrada (usando holder.wait())
  3. texto Cuando el usuario ha introducido que sincroniza el objeto "soporte" y da el resultado + notifica el hilo "lógica" (con holder.notify())
  4. el hilo "lógica" se libera de su cerradura y continúa.

ejemplo completo:

public static void main(String... args) throws Exception { 
    final List<Integer> holder = new LinkedList<Integer>(); 

    final JFrame frame = new JFrame("Test"); 

    final JTextField field = new JTextField("Enter some int + press enter"); 
    frame.add(field); 
    field.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      synchronized (holder) { 
       holder.add(Integer.parseInt(field.getText())); 
       holder.notify(); 
      } 
      frame.dispose(); 
     } 
    }); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setVisible(true); 

    // "logic" thread 
    synchronized (holder) { 

     // wait for input from field 
     while (holder.isEmpty()) 
      holder.wait(); 

     int nextInt = holder.remove(0); 
     System.out.println(nextInt); 
     //.... 
    } 
} 
+0

Ver pregunta actualizada. – Derek

+0

@Deza: actualizado con el ejemplo completo. – dacwe

+1

Casi 6 años después, ¡gracias! Buen ejemplo – DCON

0

aplicación de consola y la aplicación GUI son bastante diferentes en el comportamiento. La aplicación de consola toma la entrada de los argumentos de la línea de comando o espera la entrada ingresada por el usuario desde el teclado, mientras que la aplicación GUI es impulsada por el mecanismo de evento para realizar una tarea.

Por ejemplo, agrega un objeto TextField a su Marco y agrega un KeyListener a su objeto de campo de texto. El oyente se invoca cuando el evento clave ha sido notificado. Hay muchos ejemplos, por ejemplo ejemplo oficial de Java http://download.oracle.com/javase/tutorial/uiswing/events/keylistener.html

Cuestiones relacionadas