找回密码
 注册会员
查看: 629|回复: 0

【一个简单的GUI问题】为什么frame中加入Button后原来的键盘事件就不能用了???

[复制链接]
发表于 2010-3-9 16:24:43 | 显示全部楼层 |阅读模式
<p>【一个简单的GUI问题】为什么frame中加入Button后原来的键盘事件就不能用了???</p>
<p><img src="http://img.baidu.com/img/iknow/icn_point.gif"> 悬赏分:5 -</p>
<p>解决时间:2010-3-9 16:23</p>
<p>【如下程序按“s”后有反应,出现“ok”字样】</p>
<p>import java.awt.Button;</p>
<p>import java.awt.Frame;</p>
<p>import java.awt.event.KeyAdapter;</p>
<p>import java.awt.event.KeyEvent;</p>
<p>import java.awt.event.KeyAdapter;</p>
<p>import java.awt.event.KeyEvent;</p>
<p>import java.awt.event.KeyListener;</p>
<p>public class Huhu {</p>
<p>public static void main(String[] args) {</p>
<p>FrameText f = new FrameText();</p>
<p>}</p>
<p>}</p>
<p>class FrameText extends Frame</p>
<p>{</p>
<p>FrameText()</p>
<p>{</p>
<p>add(b);</p>
<p>setBounds(30,30,300,300);</p>
<p>Motion m = new Motion();</p>
<p>addKeyListener(m);</p>
<p>setVisible(true);</p>
<p>}</p>
<p>}</p>
<p>class Motion extends KeyAdapter</p>
<p>{</p>
<p>public void keyPressed(KeyEvent e) {</p>
<p>if(e.getKeyCode()==KeyEvent.VK_S)</p>
<p>System.out.println("ok");</p>
<p>}</p>
<p>}</p>
<p>【但加入一个Button后按\'S\'就没反应了】</p>
<p>import java.awt.Button;</p>
<p>import java.awt.Frame;</p>
<p>import java.awt.event.KeyAdapter;</p>
<p>import java.awt.event.KeyEvent;</p>
<p>import java.awt.event.KeyAdapter;</p>
<p>import java.awt.event.KeyEvent;</p>
<p>import java.awt.event.KeyListener;</p>
<p>public class Huhu {</p>
<p>public static void main(String[] args) {</p>
<p>FrameText f = new FrameText();</p>
<p>}</p>
<p>}</p>
<p>class FrameText extends Frame</p>
<p>{</p>
<p>FrameText()</p>
<p>{</p>
<p>Button b = new Button();</p>
<p>add(b);</p>
<p>setBounds(30,30,300,300);</p>
<p>Motion m = new Motion();</p>
<p>addKeyListener(m);</p>
<p>setVisible(true);</p>
<p>}</p>
<p>}</p>
<p>class Motion extends KeyAdapter</p>
<p>{</p>
<p>public void keyPressed(KeyEvent e) {</p>
<p>if(e.getKeyCode()==KeyEvent.VK_S)</p>
<p>System.out.println("ok");</p>
<p>}</p>
<p>}</p>
<p>问题补充:</p>
<p>嘿嘿~~真详细 谢谢您哈~~~内牛满面啊~~~</p>
<p>提问者: 小烂泥 - 二级</p>
<p>最佳答案</p>
<p>你都评价这么高了,怎么也不选作最佳答案啊,我要内牛满面了额。。</p>
<p>=============================================================</p>
<p>(⊙o⊙)…你运行过你的程序难道没有发现其实整个界面被那个button全部占用了么?看不出来的话在上面单击几下,应该会比较明显~</p>
<p>其实么,原理也很简单,你想你只是调用了add,你又没告诉他放在那里,放多大,再说你整个窗口也就add了一个按钮,其他什么组件都没添加,所以Frame的默认布局管理器就把这个按钮撑满了整个窗口</p>
<p>==============================================================</p>
<p>因为你整个界面都被button占用了,当然frame获得的事件都会分发(dispatch)给Button处理了咯~</p>
<p>如果你写b.addKeyListener(m);就可以看到打印出来额字符了</p>
<p>另外啊,朋友你的窗口按大叉关不掉,你每次运行完不觉得难过的么。。。= =</p>
<p>加个事件吧~</p>
<p>addWindowListener(new WindowAdapter() {</p>
<p>public void windowClosing(WindowEvent event) {</p>
<p>dispose();</p>
<p>}</p>
<p>});</p>
<p>0</p>
<p>回答者:</p>
<p>Irreappearable - 五级   2010-2-17 22:26</p>
<p>我来评论>></p>
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|文字版|手机版|小黑屋|襄阳城

GMT+8, 2025-8-3 18:35

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表