2009-05-22 7 views
5

Ich benutze einen JFrame als Pop-up aus einem Hauptrahmen, wo der Benutzer einige Informationen eingeben soll und dann OK drücken. Aber das Problem ist, dass, sobald dieser Subframe geöffnet ist, ich möchte, dass das Programm jedes andere Signal ignoriert, bis die OK-Taste gedrückt wird, ähnlich wie es mit JOptionPanes gemacht wird. Wie es jetzt ist, könnten Sie auf den Knopf klicken, um den Unterrahmen mehrere Male zu öffnen, wodurch Sie mehrere Rahmen bekommen, und das ist nicht die Absicht (es verursacht sogar viele Fehler).JFrame in Java

Ich könnte es mit einem Boolean lösen, der wahr ist, sobald die OK-Taste gedrückt wird, aber das scheint nicht ein cooler Weg, um es zu beheben. Ich denke, dass es einen anderen Weg geben muss, da ich den gesuchten Effekt sehen kann, der von meinen JOptionPanes kommt, aber ich kann nicht dazu kommen.

Prost.

+0

Mats_SX aus Schweden? Sie sind nicht zufällig im Paradox-Forum, oder? –

+0

Ich bin sehr viel. Häufige die OT und die eu2 Sektion :) –

+0

Dann kennst du mich schon (ich benutze meinen Vornamen und nicht meinen Nachnamen dort). –

Antwort

10

Sie benötigen einen JDialog mit modal = true. Von den Javadocs:

modal - Gibt an, ob das Dialogfeld Benutzereingaben in andere Fenster der obersten Ebene blockiert, wenn diese angezeigt werden.

+0

Also gibt es keine Möglichkeit für mich, dies mit einem JFrame zu tun? –

+2

Nicht leicht. Aber es gibt wirklich keinen Grund, hier einen JFrame zu verwenden; Ein JDialog kann fast alles, was ein JFrame kann, aber vom Betriebssystem nicht als vollständiges Fenster behandelt werden. Ein JDialog ist für diese Art von Dingen gedacht (nur ein kleines Fenster um einige Eingaben zu sammeln). –

+0

Ich werde mich daran erinnern. Die Details zu dem Thema sind, dass es ein Projekt für die Schule ist, und ich bin zufällig der Projektleiter. Ich habe diesen Code nicht selbst geschrieben, ich muss mich nur mit dem Fehler beschäftigen, den er verursacht hat, lol. Also nahm ich an, dass ein JFrame verwendet wurde, aber für zukünftige Begegnungen mit ähnlichen Aufgaben werde ich stattdessen den JDialog verwenden. –

6

Ändern Sie einfach die JFrame in eine JDialog.

dann im Konstruktor verwenden diese Zeile:

setModal(true); 

Ihre App wird dann blockiert, bis das Dialogfeld geschlossen wird.

Sie könnten in ein JOptionPane.showInputDialog() suchen, wenn Ihre Benutzer einfach eine String eingeben.

+0

Nun, sie geben drei verschiedene Strings ein, und es gibt einige Anforderungen, wie diese Strings aussehen dürfen. –

+0

Mit benutzerdefinierten Reqs wie diesem werden Sie wahrscheinlich Ihren eigenen benutzerdefinierten JDialog – jjnguy

+0

machen wollen, aber Sie könnten es trotzdem mit JOptionPane machen. Das Argument "message" für JOptionPane ist ein Objekt. Wenn es sich um eine Zeichenfolge handelt, wird der Text der Zeichenfolge angezeigt. Sie können jedoch eine JComponent übergeben, um anderen benutzerdefinierten Inhalt zu erhalten. Aber ich stimme dem "Verwenden Sie einen modalen JDialog, das ist was sie sind" oben zu. –