JDesktopPane - 如何获取活动窗口

9

如何获取在JDesktopPane中的活动(具有焦点)帧(JInternalFrame)? 我需要它来制作我的MDI记事本(虽然没有人会使用它,但只是一个培训项目)。查看api,我只看到了获取所有JInternalFrames而不是活动的函数。

3个回答

12
使用 JDekstopPane.getSelectedFrame() 方法(来自文档:此JDesktopPane中当前活动的JInternalFrame,如果当前没有JInternalFrame则为null。 )或者使用 JDesktopPane.getAllFrames() 获取当前在桌面上显示的所有JInternalFrames列表并检查 isSelected() 方法。

1
谢谢。你真的帮了我。我一直在寻找类似于getActiveFrame或getFocusedFram的东西,却忽略了getSelectedFrame ;) - Dariusz G. Jagielski

3
创建一个 List<JInternalFrame> 并在迭代时检查 isSelected()
补充:还可以参考这些 示例,它们使用 Action 从菜单中选择内部框架。

3
请注意,JDesktopPane.getAllFrames()返回一个数组,因此最好直接使用循环遍历该数组(而不是使用列表)。 - Andrew Thompson
1
不要重复造轮子。可以使用getSelectedFrame()或getAllFrames()中的任意一个。 - camickr

2
您看过标题为如何使用内部框架的Java教程吗?在您的代码中,您需要一个InternalFrameListener(API)(Tutorial)并侦听激活/停用事件。激活表示内部框架被置于顶部;停用表示它不再处于顶部。由于JDesktopPane扩展了JLayeredPane,因此您还可以设置添加到其中的组件的Z顺序。

不要遍历所有窗格-使用事件。

如果出于某种原因您更喜欢轮询UI而不是使用事件驱动方法,您可以调用getSelectedFrame,该方法返回活动的JInternalFrame。我不确定为什么没有其他人提到它。


@trashgod,这很简单,因为当 JInternalFrames 被创建时,会附加一个 InternalFrameListener 来跟踪哪个框架是活动的,哪个不是。我稍微更新了我的答案,以防发帖人不喜欢事件 - JDesktopPane 有方法 getSelectedFrame - Paul
在您的代码中,您需要一个InternalFrameListener(API)(教程),并监听激活/停用事件。
已激活表示内部框架被置于顶部;已停用表示它不再处于顶部。
由于JDesktopPane扩展了JLayeredPane,因此您还可以设置添加到其中的组件的z顺序。 换句话说,这是关于“如何使您的代码更加混乱和不直观”的另一个提示。谢谢,不过我会保持我的代码简单易懂,即使您从未使用过Java也能理解它。
- Dariusz G. Jagielski
不要重复造轮子。之前提到了getSelectedFrame()。 - camickr
@DariuszG.Jagielski,请看我对camickr的回复,并祝你在应对UI变化时好运。 - Paul
问题是“如何获取活动帧”,而不是“如何跟踪帧的激活/停用”。您建议使用侦听器和处理事件来跟踪活动帧,这是重新发明轮子,因为已经存在一种方法来做到这一点。同意它是另一个问题的解决方案,只是不是这个问题的解决方案。 - camickr
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接