2011-12-17 26 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。我不确定为什么没有人提到它。