关于键盘响应的代码的一点问题

lzy0577 2009-07-03 04:12:28
完整代码如下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class KeyPress
{
public static void main(String[] args)
{
KeyFrame frame = new KeyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}

class KeyFrame extends JFrame
{
public KeyFrame()
{
setTitle("KeyPress");
setSize(WIDTH, HEIGHT);

// 将panel加入到frame
KeyPanel panel = new KeyPanel();
Container contentPane = getContentPane();
contentPane.add(panel);
}

public static final int WIDTH = 300;
public static final int HEIGHT = 200;
}

class KeyPanel extends JPanel
implements KeyListener
{
public KeyPanel()
{
//注册监听器
addKeyListener(this);
}

public boolean isFocusTraversable()
{
//允许面板获得焦点
return true;
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);

//输出虚拟键码
if(KeyVirtualCode == -1)
g.drawString("虚拟键码:", 100, 80);
else
g.drawString("虚拟键码:" + KeyVirtualCode, 100, 80);

//输出键的名称
g.drawString("键名称:"+ KeyText, 100, 110);

//输出字符
g.drawString("字符:"+ KeyChar, 100, 140);
}

public void keyPressed(KeyEvent event)
{
//得到虚拟键码
KeyVirtualCode = event.getKeyCode();
}

public void keyReleased(KeyEvent event)
{
KeyVirtualCode = event.getKeyCode();

//得到键的名称
KeyText = event.getKeyText(KeyVirtualCode);

//得到字符
if(!isChar)
{
KeyChar= ' ';
}
isChar = false;

repaint();
}

public void keyTyped(KeyEvent event)
{
KeyChar = event.getKeyChar();
isChar = true;
}

public char KeyChar = ' ';
public int KeyVirtualCode = -1;
public String KeyText = "";
public boolean isChar = false;
}

————————————————————————————————————————

关于以下这段代码,不明白有什么作用

public boolean isFocusTraversable()
{
//允许面板获得焦点
return true;
}

我发现把isFocusTraversable这个写成了isFcousTraversable之后(就是c和o换了一下),按下键盘上的按键之后没有应该有的响应,是不是这个isFocusTraversable在系统里是有的,我们程序中的只是将之覆盖掉了,那么isFocusTraversable的作用是什么呢?或者说焦点有什么用?
...全文
100 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
iambrightdu 2009-07-09
  • 打赏
  • 举报
回复
楼上嘴真臭,没有建设性意见只会糟蹋环境。。。
cnmcnmgb 2009-07-08
  • 打赏
  • 举报
回复
上面两个家伙都在放P,楼主不用管他们

貌似现在高手都去赚钱了,哪有空管菜鸟
bigbug9002 2009-07-07
  • 打赏
  • 举报
回复
回车会触发ActionEvent,不应该用键盘事件来做吧?
lzy0577 2009-07-07
  • 打赏
  • 举报
回复
本人第1此贴图 贴得不好 请大家谅解
lzy0577 2009-07-07
  • 打赏
  • 举报
回复
可能是我上面没有解释这个程序的用途

这个程序的用途就是:按一下键盘上的某一个键,然后显示按的这个键的虚拟键码、这个键的名称以及这个键输出的字符

下面3张为效果图,分别为按下a键、数字键1和回车键。


lzy0577 2009-07-07
  • 打赏
  • 举报
回复
可能是我上面没有解释这个程序的用途

这个程序的用途就是:按一下键盘上的某一个键,然后显示按的这个键的虚拟键码、这个键的名称以及这个键输出的字符

下面3张为效果图,分别为按下a键、数字键1和回车键。





lzy0577 2009-07-06
  • 打赏
  • 举报
回复
回3楼:

你的意思是:isFocusTraversable是系统自带的,我这里只是重载了。

它是返回组件是否能成为焦点的拥有者,是吧?

那么拥有焦点和没有拥有焦点有什么区别,焦点又有什么作用呢?

难道说拥有焦点的话,就可以接收键盘输入,没有则不行?
lzy0577 2009-07-06
  • 打赏
  • 举报
回复
回3楼:

你的意思是:isFocusTraversable是系统自带的,我这里知识重载了。

它是返回组件是否能成为焦点的拥有者,是吧?

那么拥有焦点和没有拥有焦点有什么区别,焦点又有什么作用呢?

难道说拥有焦点的话,就可以接收键盘输入,没有则不行?
rabbit_liu 2009-07-06
  • 打赏
  • 举报
回复
学习来了
lzy0577 2009-07-06
  • 打赏
  • 举报
回复
这是我看一个PPT的时候,它附带的源码,确实就只有这一个文件。

我编译运行以上的代码是能看到效果的,可是我把sFocusTraversable 这段代码删掉了以后,就没有一点反应了。

如果2楼不信的话,自己编译运行下就知道了。

wibnmo 2009-07-06
  • 打赏
  • 举报
回复
太长了,懒了,看不了。。。
lzy0577 2009-07-06
  • 打赏
  • 举报
回复
怎么都没有人回的啊

这个问题是太简单了还是太难了啊。。。
hwlhwj 2009-07-04
  • 打赏
  • 举报
回复
是系统自带的,api描述如下:
isFocusTraversable
@Deprecated
public boolean isFocusTraversable()
Deprecated. As of 1.4, replaced by isFocusable().

Returns whether this Component can become the focus owner.

Returns:
true if this Component is focusable; false otherwise
kobe6010 2009-07-04
  • 打赏
  • 举报
回复
就从你这段代码里面 我看不出isFocusTraversable方法有什么用!

你的KeyPress也没实现接口也没继承任何父类!

所以isFocusTraversable这方法是自定义构造的布尔类型的方法!



我想你应该不止这一个文件吧?定义了public公共类型!那在别的类里面可以调用这isFocusTraversable方法!

所以我想应该是其他类调用这方法的!你看看别的类里面有没调用这方法!
lzy0577 2009-07-03
  • 打赏
  • 举报
回复
都没人回答吗,自己顶!

62,621

社区成员

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

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