2010-04-13 10 views
6

Ich habe eine JDialog, die einen Namen von dem Benutzer nimmt. Hinter der JDialog ist ein Applet. Ich möchte nicht, dass der Benutzer auf dieses Applet zugreift, bis er den Namen eingegeben hat. Ich versuchte , aber das Applet wirft einen AccessException Fehler. Also was ich getan habe, war eine while-Schleife, die JDialog.setVisible(true) ausführen wird, bis die JtextField (Eingabe für den Benutzernamen) leer ist (""). Aber aus irgendeinem Grund funktioniert dies wirklich langsam, was bedeutet, dass die JDialog lädt, aber es braucht Zeit, um auf die JTextField zu konzentrieren und auch wenn der Benutzer seinen Namen eingibt, kommt es wirklich langsam ... wie ein Zeichen in 2 Sekunden ... Ist da andere Möglichkeit für mich, den Benutzer zu zwingen, den Namen vor dem Zugriff auf das Applet einzugeben?wie sicherstellen, dass JDialog immer an der Spitze bleibt

Antwort

10

Verwenden modal ein JDialog. Zum Beispiel der Code in Ihrer init (...) -Methode von JApplet könnten gehören:

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

Oder Sie können einfach eine JOptionPane.showInputDialog() verwenden. Wieder würden Sie einfach "this" als übergeordnete Komponente des Optionsfensters angeben. sein

+0

genau das, was ich gesucht habe. Vielen Dank. – mithun1538

+0

Aber es gibt ein Problem. ActionListeners reagieren nicht mehr. Außerdem kann der Benutzer den Dialog schließen (oben rechts im Dialog befindet sich ein x). Muss ich etwas wiederherstellen, nachdem der Benutzer den Namen eingegeben hat? – mithun1538

+0

Wenn Sie nicht möchten, dass der Benutzer den Dialog schließen kann, verwenden Sie: dialog.setDefaultCloseOperation (...); – camickr

0

Es läuft langsam, da das Programm diese Schleife foo Verarbeitung wird

Was können Sie tun, ist ein Fenster Listener hinzufügen und dann die JDialog verloren sie im Fokus (oder das Applet gewinnt er) zurückkehren den Fokus auf die JDialog. jetzt

sollte viel besser als die for-Schleife Diese führen Sie verwenden

+0

Wenn ModalityTypes für Applets funktionieren, würde ich stattdessen vorschlagen. Ich habe jedoch keine Zeit, das herauszufinden. –

+0

Ich habe einen FocusListener zu JDialog hinzugefügt und den Body für die Funktion focusLost() darin geschrieben. Es scheint jedoch nicht zu funktionieren. Wenn der Benutzer außerhalb des JDialogs klickt, wird er nicht erneut angezeigt. Ich denke, das Klicken außerhalb des JDialogs führt nicht dazu, dass der JDialog den Fokus verliert, sondern nur versteckt wird. – mithun1538

+0

mmhhh, können Sie einen Beispielcode posten? – OscarRyz

1

wäre eine weitere Option:

frame.setAlwaysOnTop(true); 

Es zwingt den Dialog oben auf jeder anderen.