给一个窗体增加快捷键

      我们在使用一个应用程序的时候,如果熟练运用一些快捷键的话,会大大增加效率,那么使用Swing编程该如何添加快捷键呢?下面就让我们来实现他。
      首先来看一下可能遇到哪些问题。一般来讲,快捷键一定是要被绑定到某一个组件上面的,并且在这个组件拥有焦点的时候快捷键才有效。这就遇到问题了,并没有哪一个组件能够长期拥有焦点,焦点是经常变化的,难道快捷键也会随着组件失去焦点而失效吗?Swing的设计者考虑到了这个问题,他们放宽了快捷键有效的范围:本组件拥有焦点,快捷键有效;本组件内部包含的其他组件拥有焦点,快捷键有效;与本组件处于并列关系的其他组件(即几个组件位于同一个容器中)拥有焦点,快捷键有效。
      但是,Swing并没有把快捷键和实际的动作直接映射起来,他采用的是间接映射的方式:把KeyStroke和某个Key映射一下(称之为InputMap),再把Key和某个Action映射一下(称之为ActionMap),从而实现KeyStroke与Action的间接映射。这样,对于任何一个组件都维护者4个映射表:三个InputMap分别对应这3个有效范围,外加1个ActionMap。因此,我们给系统添加快捷键的一般步骤是:选择一个合适范围的InputMap,添加(Key-KeyStroke)映射;再在ActionMap中添加(Key-Action)映射。代码如下:
public class ButtonClickPanel extends JPanel {

    
public ButtonClickPanel() {

        add(
new JButton("Red"));
        
//选择范围为WHEN_ANCESTOR_OF_FOCUSED_COMPONENT的InputMap映射
        InputMap im1 = getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
        im1.put(KeyStroke.getKeyStroke(
"F2"), "change to red");
        
//添加ActionMap映射
        ActionMap am1 = getActionMap();
        am1.put(
"change to red"new MyAction(Color.RED));
    }

    
    
class MyAction extends AbstractAction {

        
public MyAction(Color c) {;
            co 
= c;
        }

        @Override
        
public void actionPerformed(ActionEvent e) {
            
// TODO Auto-generated method stub
            setBackground(co);
        }

        
        
private Color co;
    }

}

这样就将F2定义为使背景色变红的快捷键。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值