2013-09-05 60 views
0

我已經閱讀了一些類似的線程,但他們沒有幫助我。 我有我的JDialog是未修飾,最初是unfocusable:如何以編程方式聚焦JDialog?

super(connectionsTree.getMainFrame(), "", false); 
     super.setUndecorated(true); 
     super.setFocusableWindowState(false); 
     super.setFocusable(false); 
super.getContentPane().add(scrollPane); 
     super.pack(); 

現在,每當這個對話框是可見和用戶熱塑性彈性空間按鈕,我必須作出這樣的JDialog集中,以便它發出的按鍵事件。 我這樣做,像這樣:

if (keyCode == 32) { 
      tooltip().setFocusable(true); 
      tooltip().setFocusableWindowState(true); 
      tooltip().requestFocusInWindow(); 
     } 

該代碼使得我的JDialog可成爲焦點,但JDialog的不集中和重點活動不是由它掌握。 tooltip()方法只返回我的JDialog的實例。

如何讓我的JDialog接收焦點編程?

謝謝!

+0

什麼是'tooltip()'?它有什麼作用? – tbodt

+0

此方法僅返回應通過requestFocusInWindow()方法接收焦點的JDialog實例。 –

回答

2

根據documentationrequestFocusInWindow()重點到Component將被授予只有當頂級父組件是焦點所有者。所以如果你的主窗口沒有關注它,這將不起作用。您應該使用Component#requestFocus()。 從Component#requestFocus()描述

請求此Component獲得輸入焦點,並且此Component的頂層祖先成爲焦點窗口。

+0

謝謝智者。它幫助! –

+0

@VolodymyrLevytskyi你應該接受這個答案,如果它解決了你的問題;) – Laf

+0

我接受了它。 requestFocusInWindow()意味着窗口內的組件接收焦點,而requestFocus()方法意味着窗口本身接收焦點。 –

相關問題