2011-12-17 70 views
8

如何獲取JDesktopPane中的活動(具有焦點)框架(JInternalFrame)?我需要它用於我的MDI記事本(不是任何人都會使用它,只是一個培訓項目)。看看api,我看到的只是獲取所有JInternalFrame的函數,而不是活動的。JDesktopPane - 如何獲取活動框架

回答

10

使用JDekstopPane.getSelectedFrame()方法(從DOC:此JDesktopPane當前活動的JInternalFrame,如果沒有JInternalFrame處於當前活動的空)或JDesktopPane.getAllFrames()獲取當前顯示在桌面上的所有JInternalFrames的列表並檢查​​方法。

2

製作一個List<JInternalFrame>,並在迭代時檢查isSelected()

附錄:另請參閱使用Action從菜單中選擇內部幀的example

+3

請注意,[JDesktopPane.getAllFrames()](http://docs.oracle.com/javase/7/docs/api/javax/swing/JDesktopPane.html#getAllFrames())會返回一個數組,因此您可能以及迭代數組(而不是使用列表)。 – 2011-12-17 04:42:23

+1

-1重新發明車輪。將使用getSelectedFrame()或getAllFrames()。 – camickr 2011-12-17 05:23:09

+0

這是一個公平的警察。 – trashgod 2011-12-17 05:47:45

2

你看過名爲How to Use Internal Frames的Java教程嗎?在您的代碼中,您需要一個InternalFrameListenerAPI)(Tutorial)並收聽激活/取消激活事件。激活表示內部框架被帶到頂部;停用意味着它不再處於頂端。由於JDesktopPane延伸了JLayeredPane您還可以設置添加到它的組件的z順序。

不要迭代所有窗格 - 使用事件。

如果由於某種原因,您更傾向於輪詢您的用戶界面,而不是使用事件驅動的方法,則可以撥打getSelectedFrame返回活動的JInternalFrame。我不確定爲什麼沒有人提到它。