关于Frame加KeyListener的问题(急!!!!!)

sarsor 2002-12-14 08:12:21
如果code如下:
public class TsClose extends Frame{

public TsClose() {
super();
this.addKeyListener(new KeyListener()
{
public void keyPressed(KeyEvent e)
{
char inChar = e.getKeyChar();
System.exit(0);
}
public void keyReleased(KeyEvent e) // define the abstract method
{}
public void keyTyped(KeyEvent e)
{}
});
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public static void main(String[] args) {
TsClose tsClose1 = new TsClose();
tsClose1.show();
}
}
程序能工作正常,按键TsClose退出。
但是如果在TsClose里加一点东西,TsClose就对按键没反应了:
package com.sarsor.change;
import java.awt.*;
import java.awt.event.*;

public class TsClose extends Frame{

Can can = new Can("Welcome!");
Panel pan = new Panel();
public TsClose() {
super();

this.setSize(400,300);
pan.add(can);
add(pan);
pan.addKeyListener(new KeyListener()
{
public void keyPressed(KeyEvent e)
{
char inChar = e.getKeyChar();
can.setOut(inChar);

System.exit(0);
}
public void keyReleased(KeyEvent e) // define the abstract method
{}
public void keyTyped(KeyEvent e)
{}
});
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public static void main(String[] args) {
TsClose tsClose1 = new TsClose();
tsClose1.show();
}
}


class Can extends Canvas
{
String out;
public Can(String st)
{
this.setSize(200,200);
this.setBackground(Color.white);
out = st;
}

public void setOut(char ch)
{
char[] toShow = new char[1];
toShow[0] = ch;
out = new String(toShow,0,1);
repaint();
}
public void paint(Graphics g)
{
g.drawString(out,100,100);
}
}
怎么样才能使TsClose还是对按键有反应呢?
清帮帮我,我等着急用呢!??
...全文
127 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
colors 2002-12-18
  • 打赏
  • 举报
回复
我也遇到过类似问题,但我还是不知道如何解决。
哪位高手 快来啊
ThisTimeThree 2002-12-18
  • 打赏
  • 举报
回复
说到这里我有一个类似问题,借贵方宝地用用,就是怎样在有多个window时,不用管focus在那里都可以在主要Frame里捕捉按键。如果是C就知道怎样做,可Java就不知道了,这个消息机制是怎样传递的。Message Queue 在何处。小弟初学Java,很多不懂,还请各位大哥见谅,况且这个也与完美平台大哥问题有关,事实是由此联想出的,
sarsor 2002-12-17
  • 打赏
  • 举报
回复
谢了啊!!!
Winuxava 2002-12-15
  • 打赏
  • 举报
回复
回到家里,查查 jdk,果然都是 1.4 的,难怪。
1.3 以前用什么方法我不清楚,帮你继续 up 。
sarsor 2002-12-14
  • 打赏
  • 举报
回复
my god!!!
还是没用!!!
sarsor 2002-12-14
  • 打赏
  • 举报
回复
首先我要申明,“w cao”(not 我操 is 我靠)并不是在骂人,只是当作一种语气词(你难道没听别人说过吗)。
其次,1.4的jdk我是有的,但我只知道在IDE中release product,所以没用。
Winuxava 2002-12-14
  • 打赏
  • 举报
回复
我手头没有jdk,不记得哪些是1.4的函数,哪些不是。条件允许的话,你可以取down个1.4的jdk,肯定有这两个函数。
Winuxava 2002-12-14
  • 打赏
  • 举报
回复
JDK 1.4 是有的,可能以前没有。不过就算没有,用得着口吐粗言吗?
帮你这种人真是没趣!
不行的话,试试 pan.requestFocusInWindow()
sarsor 2002-12-14
  • 打赏
  • 举报
回复
Object<-Component<-Container<-Panel
w cao别玩了好不好
你说的里面都没有
Winuxava 2002-12-14
  • 打赏
  • 举报
回复
倒~Panel里没有,Component里面有啊,Object<-Component<-Container<-Panel
sarsor 2002-12-14
  • 打赏
  • 举报
回复
Panel 和 Frame里都没这个method
Winuxava 2002-12-14
  • 打赏
  • 举报
回复
add(pan);
之后加一句 pan.setFocusable(true);

62,623

社区成员

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

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