2016-07-28 85 views
1

我有一個程序在CLI中運行,但使用JOptionPane來顯示一個彈出菜單來提醒用戶一個事件。我注意到,當調用showMessageDialog方法時,生成的彈出式菜單不會自動聚焦。在控制檯程序中的JOptionPane showMessageDialog請求焦點

有沒有一種方法可以請求彈出對話框的焦點?我曾嘗試在JOptionPane上調用requestFocus,但無濟於事。

這是一些示例代碼。

System.out.println("Backing up..."); 
//backUp(); 
Component frame = null; 
JOptionPane jop = new JOptionPane(); 
jop.showMessageDialog(frame, "Backup complete. Ready for encryption."); 

我很抱歉,如果這是轉發,但我一直未能找到工作答案。

+0

我只是想你的代碼,它會自動得到焦點!要測試,只需點擊「Enter」,看看彈出窗口是否消失。 – mohsenmadi

+0

@mohsenmadi如果我在另一個窗口中,則不會這樣做,這是問題所在。通常我可以通過調用requestFocus()來解決這個問題,但是我似乎無法做到這一點,因爲showMessageDialog是靜態的,調用'jop.requestFocus()'不會生效,因爲showMessageDialog暫停線。 – Sollybird

+0

仍然無法重現!我剛試過'嘗試{Thread.sleep(2000); JOptionPane.showMessageDialog(null,「Back ...」);} catch(InterruptedException e){}'給予時間專注於其他窗口。結果?當彈出窗口顯示時仍然有焦點!我在Mac上運行 - 也許不同的系統給出不同的行爲? – mohsenmadi

回答

0

創建一個JDialog並致電setAlwaysOnTop通過true

JOptionPane jop = new JOptionPane(); 
JDialog dlog = jop.createDialog(null, "Backup complete. Ready for encryption."); 
dlog.setAlwaysOnTop(true);//make JDialog on top of other windows 
dlog.setVisible(true); 

Windows上述工作,但要注意,這種行爲可能是與平臺相關的(見文檔 - 你可以檢查,如果這是通過isAlwaysOnTopSupported方法支持)