2010-04-13 19 views
6

Ho un JDialog che prende il nome da parte dell'utente. Dietro il JDialog, è un'applet. Non voglio che l'utente acceda a quell'applet finché non ha inserito il nome. Ho provato JDialog.setAlwaysOnTop(true), ma l'applet genera un errore AccessException. Quindi quello che ho fatto è stato mantenere un ciclo while che eseguirà JDialog.setVisible(true) fino al JtextField (l'input per il nome utente) è vuoto (""). Ma per qualche motivo questo funziona molto lento, vale a dire i JDialog carichi, ma ci vuole tempo per concentrarsi sul JTextField e anche quando l'utente digita il suo nome, si tratta veramente lento ... come un carattere in 2 secondi ... c'è in qualche altro modo per costringere l'utente a inserire il nome prima di accedere all'applet?come garantire che JDialog rimane sempre in primo piano

risposta

10

Utilizzare un JDialog modale. Ad esempio, il codice nel tuo init (...) il metodo di JApplet potrebbe includere:

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

oppure si può semplicemente utilizzare un JOptionPane.showInputDialog(). Di nuovo, devi solo specificare "questo" come componente principale del riquadro delle opzioni.

+0

proprio quello che stavo cercando. Grazie. – mithun1538

+0

Ma c'è un problema. ActionListeners non rispondono più. Inoltre, l'utente può chiudere la finestra di dialogo (c'è una x in alto a destra nella finestra di dialogo). C'è qualcosa che devo ripristinare dopo che l'utente ha inserito il nome? – mithun1538

+0

Se non si desidera che l'utente possa chiudere la finestra di dialogo, utilizzare: dialog.setDefaultCloseOperation (...); – camickr

0

Si gira lentamente perché il programma sta elaborando quel ciclo foo

Che cosa si può fare è quello di aggiungere un ascoltatore finestra e poi la JDialog perso la sua messa a fuoco (o l'applet guadagna esso) ritornare l'attenzione al JDialog.

Questo dovrebbe svolgere molto meglio del ciclo for si sta usando in questo momento

+0

Se ModalityTypes funziona per le applet, suggerirei invece quello. Non ho tempo di scoprirlo, però. –

+0

Ho aggiunto un FocusListener a JDialog e ho scritto il corpo per la funzione focusLost(). Tuttavia, sembra non funzionare. Se l'utente fa clic su JDialog, non viene più visualizzato. Penso che fare clic all'esterno del JDialog non faccia perdere a JDialog la messa a fuoco, ma viene semplicemente nascosto. – mithun1538

+0

mmhhh, puoi pubblicare qualche codice di esempio? – OscarRyz

1

Un'altra opzione sarebbe quella:

frame.setAlwaysOnTop(true); 

costringe la finestra di sopra di qualsiasi altro.

Problemi correlati