Foros del Web » Programación para mayores de 30 ;) » Java »

Problema Vista Modelo

Estas en el tema de Problema Vista Modelo en el foro de Java en Foros del Web. Hola a todos. A ver si me doy explicado... El problema es el siguiente y no veo la solución: Tengo un interfaz grafico en swing ...
  #1 (permalink)  
Antiguo 12/08/2010, 12:12
 
Fecha de Ingreso: agosto-2010
Mensajes: 1
Antigüedad: 13 años, 8 meses
Puntos: 0
Problema Vista Modelo

Hola a todos. A ver si me doy explicado...
El problema es el siguiente y no veo la solución:

Tengo un interfaz grafico en swing que hice con Netbeans que sólo tiene un JEditorPane que uso como pantalla y un jTexField que uso para escribir ordenes.

Quería que según lo que escribiera en el TextField el programa hiciera una cosa u otra.
Es decir:
->Escribo algo en el TextPane(esto desde el código)(una pregunta por ejemplo)
->Escribo algo en el TextField(esto ya desde el interfaz)
y lo que queria es que cuando presionara enter el programa leyera lo que hay en el Textfield y no antes(para posteriormente responder). Como si fuera un simple readLine. Pero lo único que consigo es que me lea lo que hay ya en el TextField en ese instante y que no se quede parado hasta que pulso el enter.

Sería algo así
Código:
//Este sería el programa en sí

      public static void main(String[] args) throws IOException{
            String respuesta;

                GUI gui = new GUI();
                gui.setVisible(true);

                gui.escribePantalla("ESCRIBE 'PLAYA' o 'MONTANA'");//Esto lo escribe en el textPane
                respuesta = gui.getRespuesta();//Esto lo tendria que coger del textField cuando se pulsara enter

                hacerAlgoSegunRespuesta();
            
      }

//GUI es la clase del interfaz

//y el método que no me sale sería el getRespuesta que estaría ya en el interfaz

      public String getRespuesta(){            
            while(No se pulse enter en el texfield){
                  
            }
             return textField.getText();            
      }
Estaría muy agradecido si me pudierais solucionar el problema.
Gracias.

Última edición por davidNA; 12/08/2010 a las 15:01
  #2 (permalink)  
Antiguo 12/08/2010, 18:42
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Problema Vista Modelo

Hola,

La programación MVC original está basada en eventos (programación basada o dirigida a eventos). Es decir, el controlador no repite la misma operación infinitamente (while), ni espera hasta que suceda un evento (sino se queda 'trabada' la PC mientras espera y no puede hacer otra cosa).

Solamente se conectan el que genera el evento con el que recibe el evento, y normalmente el propio evento es un mensaje. En otras palabras una conversación de emisor, receptor y mensaje. Pero el receptor no está chequeando cada segundo para ver si hubo un evento, ni espera por el. Cuando el emisor emite el evento entonces el receptor responde consecuentemente.

En java para facilitar estos procedimientos existen los Listeners, y existen Listeners para escuchar o responder ante cualquier tipo de evento.

Por ejemplo:

Creamos 2 TextField:

Código:
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
En los TextField ponemos un mensaje, pero en el primero conectamos con un KeyListener al segundo TextField. Por así decirlo, realmente vamos a realizar una acción en consecuencia de un evento que sucedió, como en este caso, una tecla que se presionó en el teclado.

Código:
        jTextField1.setText("ESCRIBE 'PLAYA' o 'MONTANA'");
        jTextField2.setText("AQUI VA LA RESPUESTA");

        jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
              if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {
                    jTextField2.setText("PRESIONASTE ENTER");
                    // Hacer algo mas según respuesta
              }
            }
        });
Cuando se presiona cualquier tecla en el TextField1 se va a llamar al método descrito en el KeyListener, este revisa si se presionó la tecla Enter y muestra un mensaje en el TextField2.

Con esta metodología no se desperdician recursos, como un ciclo que está dando vueltas millones de veces revisando si sucedió un evento. Swing y AWT fueron creado de esta forma para funcionar correctamente.

Saludos,

ps:

El ejemplo no es el mejor del mundo, en este caso solamente responde a un evento del teclado, en otros casos se conectan directamente un objeto con el otro, guardando una referencia dentro de un listado de receptores del evento.

Última edición por HackmanC; 12/08/2010 a las 19:15 Razón: * fallo del internet

Etiquetas: modelo, vistas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:08.