学以致用——Java源码——键盘事件演示程序(Keystroke Events Demo Program)

程序功能

捕捉用户在键盘上的按键,按键分为三种类型:

1. 操作键(Action Key)(箭头、Home、End、翻页键、功能键(F1-F12)、INSERT键、PRINT SCREEN键、CAPS LOCK键、WINDOWS键等,但不包括DELETE键)

2. 普通键(Key)(字符键,包括字母、数字、标点符号、特殊符号、确认键、删除键、回退键等)

3. 辅助键(Modifier Key)(转换键SHIFT、控制键CTRL、替换键ALT等)

注:TAB键和FN键未被本程序识别,难道是不属于以上类型?

 

总结如下:由下表测试结果小结来看,普通键和操作键、辅助键的最大区别在于普通键按住不放可以连续输入,而另外两种按键则不行。

 

按键类型按键动作类型键盘事件类型
操作键按住不放keyPressed
操作键按一下松开keyReleased
字符键按住不放keyTyped
字符键按一下松开keyReleased
辅助键按住不放keyPressed
辅助键按一下松开keyReleased

 

运行结果示例:

代码:

注:本文代码基于Java How to Program, 第10版, 第12章:GUI组件修改而成。

1. 测试类

// Fig. 12.37: KeyDemo.java
// Testing KeyDemoFrame.
import javax.swing.JFrame;

public class KeyDemo 
{
   public static void main(String[] args)
   { 
      KeyDemoFrame keyDemoFrame = new KeyDemoFrame(); 
      keyDemoFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      keyDemoFrame.setSize(1000, 300); 
      keyDemoFrame.setVisible(true); 
   } 
} // end class KeyDemo

2. 实体类

// Fig. 12.36: KeyDemoFrame.java
// Key event handling.
import java.awt.Color;
import java.awt.Font;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class KeyDemoFrame extends JFrame implements KeyListener 
{
   /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
private String line1 = ""; // first line of textarea
   private String line2 = ""; // second line of textarea
   private String line3 = ""; // third line of textarea
   private JTextArea textArea; // textarea to display output

   // KeyDemoFrame constructor
   public KeyDemoFrame()
   {
      super("Demonstrating Keystroke Events(键盘按键事件演示程序)");

      textArea = new JTextArea(30, 45); // set up JTextArea
      textArea.setText("Press any key on the keyboard...(请按下键盘上的任意按键)");
      textArea.setEnabled(false);
      textArea.setDisabledTextColor(Color.BLACK);
      textArea.setFont(new Font("Sun", Font.PLAIN, 20));
      add(textArea); // add textarea to JFrame

      addKeyListener(this); // allow frame to process key events
   } 

   // handle press of any key
   @Override
   public void keyPressed(KeyEvent event)
   {
      line1 = String.format("Key pressed(按键已按下且未被松开): %s", 
        KeyEvent.getKeyText(event.getKeyCode())); // show pressed key
      setLines2and3(event); // set output lines two and three
   }

   // handle release of any key
   @Override
   public void keyReleased(KeyEvent event)
   {
      line1 = String.format("Key released(按键已松开): %s",
         KeyEvent.getKeyText(event.getKeyCode())); // show released key
      setLines2and3(event); // set output lines two and three
   }

   // handle press of an action key
   @Override
   public void keyTyped(KeyEvent event)
   {
      line1 = String.format("Key typed(按键已按下,但未松开,正在重复键入该按键): %s", event.getKeyChar());
      setLines2and3(event); // set output lines two and three
   }

   // set second and third lines of output
   private void setLines2and3(KeyEvent event)
   {
      line2 = String.format("This key is %san action key(该按键%s操作键:箭头、Home、End、翻页键、功能键等)", 
         (event.isActionKey() ? "" : "not "),(event.isActionKey() ? "是" : "不是"));

      String temp = KeyEvent.getKeyModifiersText(event.getModifiers());

      line3 = String.format("Modifier keys pressed(已按下的辅助键(转换键SHIFT、控制键CTRL、替换键ALT等)) : %s", 
         (temp.equals("") ? "none(无)" : temp)); // output modifiers

      textArea.setText(String.format("%s\n%s\n%s\n", 
         line1, line2, line3)); // output three lines of text
   }
} // end class KeyDemoFrame

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值