已有259人关注
键盘监听与组件焦点的关系
发表在Java答疑区 2017-08-31 悬赏:30 学分
是否精华
版块置顶:

1.png

我不是很明白焦点在组件之间是怎样得失的,网上查资料说setfocusable()设置为false为不能获得焦点,设置为true为有机会获得焦点,可是为什么我在设置frame.setfocusable(false)时还是会触发它的监听事件,而且是有几率性的触发.不仅仅是frame,panel也有这种情况,所以请老师解答

2017-08-31 20:17:24编辑
分享到:
精彩评论 5
David
学分:914 LV7
TA的每日心情
最后的冲刺
2017-07-15 10:46:08
2017-09-01
沙发

http://blog.csdn.net/njnu_mjn/article/details/6462470/,这是位博主的帖子(内涵实例),希望可以对读者有所帮助。

静守时光以待流年
学分:221 LV4
2017-09-02
板凳

David 发表于2017-09-01 14:44

http://blog.csdn.net/njnu_mjn/article/details/6462470/,这是位博主的帖子(内涵实例),希望可以对读者有所帮助。

老师,这篇文章对我的疑问没有用.他说的我都符合,我现在就是有个疑惑:键盘事件的响应与组件焦点有关,但是我两个组件都设置了setfocusable(false),按理说这两个组件应该不能获得焦点,只有frame能获得,可是我程序中(添加了焦点事件)会显示panel得到了焦点并且frame响应键盘事件,即使我把frame的键盘监听注释掉,再设置 panel.setFocusable(true);但是panel的键盘监听还是没用,所以我挺疑惑的.您看看我的代码吧,百度了好久没有用


11.png

image.png

根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2017-09-04
地板

你将frame的addFocusListener监听中所有输出都改成“System.out.println("frame-----得到");”再看看结果

静守时光以待流年
学分:221 LV4
2017-09-04
4L

根号申 发表于2017-09-04 09:40

你将frame的addFocusListener监听中所有输出都改成“System.out.println("frame-----得到");”再看看结果

呃呃,改了之后控制台显示焦点能正常显示了,但是还是有点问题,老师您看:

  1. 图一所示:只要我frame.setfocusable()设置为true(设置为false则所有监听都失效),后面的无论setfocusable(为true还是false),控制台都只会显示frame得到焦点并且也只有frame的监听有用,注释掉frame的监听控制台就什么也不输出,所以是不是这样写焦点只能在frame上面?

  2. 图二所示:我为jpanel子类的构造方法中设置setfocusable(true)居然又只能响应gamePanel的键盘监听,图中所示frame的键盘监听不能响应,无论frame.setfocusable设置什么gamePanel都能响应,但是如果不在其构造函数中写setfocusable(true)而是在主程序写(图三,与图一类似写法)则又只能响应frame的监听,所以是不是构造函数里面的setfocusable(true)优先级高一些?

              

123.png






根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2017-09-11
5L

静守时光以待流年 发表于2017-09-04 23:37

呃呃,改了之后控制台显示焦点能正常显示了,但是还是有点问题,老师您看:

  1. 图一所示:只要我frame.setfocusable()设置为true(设置为false则所有监听都失效),后面的无论setfocusable(为true还是false),控制台都只会显示frame得到焦点并且也只有frame的监听有用,注释掉frame的监听控制台就什么也不输出,所以是不是这样写焦点只能在frame上面?

  2. 图二所示:我为jpanel子类的构造方法中设置setfocusable(true)居然又只能响应gamePanel的键盘监听,图中所示frame的键盘监听不能响应,无论frame.setfocusable设置什么gamePanel都能响应,但是如果不在其构造函数中写setfocusable(true)而是在主程序写(图三,与图一类似写法)则又只能响应frame的监听,所以是不是构造函数里面的setfocusable(true)优先级高一些?

              

123.png






因为面板没有获得/失去焦点的功能,所以不会有反应,不像窗体之间是有焦点切换的。所以在开发应用上,焦点事件、键盘事件都应该依附在窗体上,而不是面板上。可以在面板切换之后,调用窗体的add...Listener()或remove...Listener()来更换监听内容。

首页上一页 1 下一页尾页 5 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照