2010-04-13 110 views
6

我有一個JDialog,它取自用戶的名稱。在JDialog後面是一個小程序。我不想讓用戶在輸入名稱前訪問該小程序。我試過JDialog.setAlwaysOnTop(true),但該小程序會拋出一個AccessException錯誤。所以我做了一個while循環,它將執行JDialog.setVisible(true)直到JtextField(用戶名輸入)爲空(「」)。但由於某種原因,這種方法非常緩慢,這意味着JDialog加載,但需要時間專注於JTextField,甚至當用戶輸入他的名字時,它會非常緩慢......就像2秒內的一個字符......是任何其他方式讓我強制用戶在訪問小程序之前輸入名稱?如何確保JDialog始終保持最佳狀態

回答

10

用一個模式的JDialog性能要好得多。例如,在你的初始化代碼(...)JApplet的方法可能包括:

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

或者你也可以只使用一個JOptionPane.showInputDialog()。再次,您只需將「this」指定爲選項窗格的父組件即可。

+0

就是我在找的東西。謝謝。 – mithun1538 2010-04-14 14:11:22

+0

但是有一個問題。 ActionListeners不再響應。此外,用戶可以關閉對話框(對話框右上角有一個x)。用戶輸入名稱後是否需要恢復任何內容? – mithun1538 2010-04-14 14:16:58

+0

如果您不希望用戶能夠關閉對話框,請使用:dialog.setDefaultCloseOperation(...); – camickr 2010-04-14 15:11:22

0

它的運行速度慢,因爲該程序正在處理FOO環

你可以做的是增加一個窗口監聽器,然後JDialog的失去了它的焦點(或小應用程序獲得的話)的焦點返回到的JDialog。

這應該比for循環您現在正在使用

+0

如果ModalityTypes適用於小程序,我會建議。不過,我沒有時間去了解。 – 2010-04-13 18:27:17

+0

我在JDialog中添加了一個FocusListener,併爲其中的focusLost()函數編寫了正文。但是,它似乎沒有工作。如果用戶點擊JDialog,它不會再次顯示。我認爲在JDialog之外單擊並不會導致JDialog失去焦點,它只會隱藏起來。 – mithun1538 2010-04-13 18:31:33

+0

mmhhh,你可以發佈一些示例代碼? – OscarRyz 2010-04-13 19:34:28

1

另一種選擇是:

frame.setAlwaysOnTop(true); 

它迫使其他任何頂部的對話框。

相關問題