JComponent的getInputMap()和getActionMap()方法

JComponent类里提供的getInputMap()方法返回一个InputMap对象,该对象用于将KeyStroke对象(代表键盘或其他类似输入设备的一次输入事件)和名字关联;getActionMap()方法返回一个ActionMap对象,该对象用于将指定名字和Action(Action接口是ActionListener的子接口,可作为一个事件监听器使用)关联,从而可以允许用户通过键盘操作来代替鼠标驱动GUI上的Swing组件,相当于为GUI组件提供快捷键。典型用法如下:

//把一次键盘事件和一个aCommand对象关联

component.getInputMap().put(aKeyStroke,aCommand);

//将aCommand对象和一个Action事件响应关联

component.getActionMap().put(aCommand,anAction);

再看下面程序:

import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestBindKey
{
 JFrame jf=new JFrame("测试");
 JTextArea ta=new JTextArea(3,30);
 JButton bt=new JButton("发送");
 JTextField tf=new JTextField(15);
 public void init()
 {
  jf.add(ta);
  JPanel jp=new JPanel();
  jp.add(tf);
  jp.add(bt);
  jf.add(jp,BorderLayout.SOUTH);

  ActionListener sendMsg=new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    ta.append(tf.getText()+"\n");
    tf.setText("");
   }
  };

  bt.addActionListener(sendMsg);
  //将Ctrl+Enter键和“send”关联
  tf.getInputMap().put(KeyStroke.getKeyStroke('\n',java.awt.event.InputEvent.CTRL_MASK),"send");
  //将"send"和sendMsg Action关联
  tf.getActionMap().put("send",sendMsg);
  
  jf.pack();
  jf.setVisible(true);
  
 }
 public static void main(String[] args)
 {
  new TestBindKey().init();
  System.out.println("Hello World!");
 }
}


上面的程序实现了一个功能:用户在单行文本框内输入内容,当用户输入完成之后,单击后面的“发送”按钮即可将文本框中的内容添加到一个多行文本域中;或者输入完成后在文本框内单击Ctrl+Eneter也可以将文本框的内容添加到多行文本域中。相当于为“发送”按钮添加了“Ctrl+Enter”快捷键。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值