2010-04-13 8 views
6

Tengo un JDialog que toma un nombre del usuario. Detrás del JDialog, hay un applet. No quiero que el usuario acceda a ese applet hasta que haya ingresado el nombre. Intenté JDialog.setAlwaysOnTop(true), pero el applet lanza un error AccessException. Entonces, lo que hice fue mantener un ciclo while que ejecutará JDialog.setVisible(true) hasta que el JtextField (entrada para el nombre de usuario) esté vacío (""). Pero por alguna razón, esto funciona realmente lento, es decir, las cargas JDialog, pero lleva tiempo enfocarse en el JTextField e incluso cuando el usuario escribe su nombre, se vuelve realmente lento ... como un personaje en 2 segundos ... ¿Hay algún ¿De otra manera, forzar al usuario a ingresar el nombre antes de acceder al applet?cómo asegurar que JDialog siempre se mantenga en la parte superior

Respuesta

10

Utilice un JDialog modal. Por ejemplo el código en su init (...) el método de JApplet podría incluir:

JDialog dialog = new JDialog(SwingUtilities.windowForComponent(this)); 
dialog.setModal(true); 
dialog.setSize(...); 
dialog.setVisible(true); 

o simplemente puede usar un JOptionPane.showInputDialog(). De nuevo, simplemente debería especificar "this" como el componente principal del panel de opciones.

+0

justo lo que estaba buscando. Gracias. – mithun1538

+0

Pero hay un problema. ActionListeners ya no responde. Y también, el usuario puede cerrar el diálogo (hay una x en la esquina superior derecha del diálogo). ¿Hay algo que necesite restaurar después de que el usuario haya ingresado el nombre? – mithun1538

+0

Si no desea que el usuario pueda cerrar el diálogo, utilice: dialog.setDefaultCloseOperation (...); – camickr

0

Se ejecuta lentamente porque el programa está procesando de que fu bucle

Lo que puede hacer es añadir un oyente ventana y luego el JDialog perdió su foco (o el applet lo gana) devuelve el foco a la JDialog.

Esto debe realizar mucho mejor que el bucle que está usando en este momento

+0

Si ModalityTypes funciona para applets, sugeriría que en su lugar. Sin embargo, no tengo tiempo para averiguarlo. –

+0

Agregué un FocusListener a JDialog y escribí el cuerpo para la función focusLost() en él. Sin embargo, parece que no funciona. Si el usuario hace clic fuera del JDialog, no volverá a aparecer. Creo que hacer clic fuera del JDialog no hace que el JDialog pierda el foco, simplemente se oculta. – mithun1538

+0

mmhhh, ¿puedes publicar un código de muestra? – OscarRyz

1

Otra opción sería:

frame.setAlwaysOnTop(true); 

Obliga al diálogo por encima de cualquier otra.

Cuestiones relacionadas