首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JInternalFrame选择

JInternalFrame选择
EN

Stack Overflow用户
提问于 2011-08-28 16:36:24
回答 4查看 2.8K关注 0票数 1

我有一个包含一些JInternalFrames的JDesktopPane。我希望菜单栏上的一些菜单仅在其中一个JInternalFrames被选中时才被激活。我尝试过使用VetoableChangeListener,其中包含以下代码:

代码语言:javascript
复制
JInternalFrame selectedFrame = desk.getSelectedFrame(); 
if ((selectedFrame != null)) {  
    imageMenu.setEnabled(Boolean.TRUE);         
} else {
    imageMenu.setEnabled(Boolean.FALSE);            
}

但结果并不是我所期望的--例如,菜单只有在我第二次添加框架时才会启用。当我关闭所有框架时,它仍然处于启用状态。

我怎么才能让它工作呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-28 17:00:11

您必须阅读具有InternalFrameListener链接JInternalFrames的基本教程,

但另一种看起来更好的方法是通过编程在所有情况下和每一次都知道这些事件是通过添加PropertyChangeListener,如示例Getting All Frames in a JDesktopPane Container所示,通过添加PropertyChangeListener,您可以为these events侦听

票数 2
EN

Stack Overflow用户

发布于 2011-08-28 17:06:29

JInternalFrame获得focus (isActivated)时,我会直接使用create a custom event and fire it。菜单项将侦听此事件,截获它,并相应地设置其状态为启用或禁用。这样做的好处是,您不必处理哪些菜单项应用于哪些类型的内部框架,只需触发相应的事件即可。如果你在将来添加更多的内部框架,你的生活会变得更容易。

票数 1
EN

Stack Overflow用户

发布于 2011-08-28 17:07:39

InternalFrameListener添加到添加到桌面窗格的每个内部框架,并在每次触发事件时执行问题中显示的代码。

不过,下面的代码可以写得更好:

  • setEnabled接受原始布尔值作为参数,而不是java.lang.Boolean。使用truefalse而不是Boolean.TRUE,并且Boolean.TRUE表达式(selectedFrame != null)的计算结果为布尔值。只需编写

即可

imageMenu.setEnabled(selectedFrame != null);

而不是

代码语言:javascript
复制
if ((selectedFrame != null)) {  
    imageMenu.setEnabled(Boolean.TRUE);         
} else {
    imageMenu.setEnabled(Boolean.FALSE);            
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7219860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档