JButton.getInputMap问题

mehere8 2010-07-05 09:57:42
在一个JPanel里面add了两个JButton jb1 jb2
想在jb1和jb2上加上快捷键

如果是这样 (用JPanel 以及 WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
InputMap imap=thePanel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) ;
imap.put( ... )
imap.put( ... )
就可以

但是我想用直接在JButton上用WHEN_IN_FOCUSED
jb1.getInputMap(JComponent.WHEN_IN_FOCUSED).put( ... )
jb2.getInputMap(JComponent.WHEN_IN_FOCUSED).put( ... )
第一个(jb1)可以
但是第二个(jb2)就没有用了

这是怎么回事?


...全文
157 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
csulipan 2010-07-08
  • 打赏
  • 举报
回复
7楼言之有理。对于api我们要知其然,更要知其所以然
gentalguo 2010-07-08
  • 打赏
  • 举报
回复
那,我明白了。你的问题就是在你的参数上。
jb1.getInputMap(JComponent.WHEN_FOCUSED)
那么,你既然有文档,可曾仔细推敲过?WHEN_FOCUSED这个参数代表的是什么?
WHEN_FOCUSED
public static final int WHEN_FOCUSED用于 registerKeyboardAction 的常量,意味着在组件获得焦点时应该调用命令。

那,换言之,不获得焦点就不调用。
也就是说只有当你的button拥有焦点的时候,这动作才有效。你可以做一试验,就按照你原来的代码,按下tab键将焦点切换到你的第二个按钮,按下第二个按钮你注册的快捷键。第二个有效,第一个却没反应了。
而一开始,第一个按钮可以执行的原因就是你的第一个按钮,原因就在于,你的第一个按钮在起始的时候会获得默认的焦点。你可以再试试,如果你先添加一个其他的组件在之前,连你的第一个快捷键都没有响应。
mehere8 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gentalguo 的回复:]
那,我明白了。你的问题就是在你的参数上。
jb1.getInputMap(JComponent.WHEN_FOCUSED)
那么,你既然有文档,可曾仔细推敲过?WHEN_FOCUSED这个参数代表的是什么?
WHEN_FOCUSED
public static final int WHEN_FOCUSED用于 registerKeyboardAction 的常量,意味着在组件获得焦点时应该……
[/Quote]
哦 我认为按了快捷键就可以让它获得焦点 搞错了

感谢感谢
mehere8 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ctkqqq 的回复:]
http://apicode.gicp.net/class.do?api=selectByfatherIndex&father=255
http://apicodecn.gicp.net/class.do?api=selectByfatherIndex&father=255
[/Quote]
老大 我有api doc啊 就是出现实际(非教条性)的问题才会问啊。。。
queen25 2010-07-06
  • 打赏
  • 举报
回复
友情 支持
gentalguo 2010-07-06
  • 打赏
  • 举报
回复
我要知道,你的inputmap里面你放置了什么。
你的actionmap在哪里?
gentalguo 2010-07-06
  • 打赏
  • 举报
回复
请把你的代码贴出。
有可能问题就出在你的省略号中。
mehere8 2010-07-06
  • 打赏
  • 举报
回复
代码如下
 
jb1.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("ctrl Y"), "panel.yellow");
jb2.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("ctrl B"), "panel.blue");

jb1.getActionMap().put("panel.yellow", yellowAction);
jb2.getActionMap().put("panel.blue", blueAction);




可是 如果把jb1 jb2换成 panel 然后参数是 WHEN_ANCESTOR_OF_FOCUSED_COMPONENT 是可以的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧