2009-05-22 13 views
5

Estoy utilizando un JFrame como una ventana emergente de un marco principal, donde se supone que el usuario debe ingresar cierta información y luego presionar OK. Pero el problema es que una vez que este subtrama se ha abierto, quiero que el programa ignore cualquier otra señal hasta que se presione el botón OK, similar a como se hace con JOptionPanes. Tal como está ahora, puede hacer clic en el botón para abrir el subchasis varias veces, obteniendo varios cuadros, y esta no es la intención (incluso causa muchos errores).JFrame en Java

Pude resolverlo con un booleano que es verdadero una vez que se presiona el botón OK, pero eso no parece una forma genial de arreglarlo. Siento que tiene que haber otra forma de hacerlo, ya que puedo ver el efecto buscado proveniente de mis JOptionPanes, pero no puedo acceder a él.

Saludos.

+0

Mats_SX de Suecia? Usted no está en los foros de Paradox por casualidad, ¿verdad? –

+0

Yo soy mucho. Frecuente el OT y la sección de eu2 :) –

+0

Entonces ya me conoce (uso mi nombre en lugar de mi apellido). –

Respuesta

10

Necesita JDialog con modal = true. Desde el Javadocs:

modal - especifica si la entrada de bloques de diálogo de usuario a otras ventanas de nivel superior cuando se muestra.

+0

Entonces, ¿no hay forma de que haga esto con un JFrame? –

+2

No es fácil. Pero realmente no hay ninguna razón para usar un JFrame aquí; un JDialog puede hacer casi cualquier cosa que un JFrame pueda, simplemente no es tratado como una ventana completa por el sistema operativo. Un JDialog es para este tipo de cosas (solo una pequeña ventana para recopilar información). –

+0

Lo recordaré. Los detalles del problema es que es un proyecto para la escuela, y yo soy el gerente del proyecto. No he escrito ese código, solo tengo que lidiar con el error que causó jajaja. Así que asumí que un JFrame era lo que iba a usarse, pero para futuros encuentros con tareas similares, utilizaré el JDialog en su lugar, entonces. –

6

Simplemente cambie el JFrame a un JDialog.

Luego, en el uso constructor de esta línea:

setModal(true); 

Su aplicación bloqueará entonces hasta que el cuadro de diálogo se cierra.

Es posible que desee consultar un JOptionPane.showInputDialog() si sus usuarios simplemente están ingresando un String.

+0

bien, están ingresando tres cadenas diferentes, y hay algunos requisitos sobre cómo estas cadenas se ven. –

+0

Con reqs personalizados como ese, es probable que desee crear su propio JDialog personalizado – jjnguy

+0

, pero aún puede hacerlo con JOptionPane. el argumento "mensaje" a JOptionPane es un Objeto. si es una cadena, muestra el texto de la cadena, pero puede pasar un JComponent para obtener otro contenido personalizado. Pero estoy de acuerdo con la respuesta "Utilizar un JDialog modal, eso es lo que significa". –