首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java :用buttonClick模拟KeyBind动画

Java :用buttonClick模拟KeyBind动画
EN

Stack Overflow用户
提问于 2016-03-16 05:38:13
回答 1查看 190关注 0票数 0

我正在制作一个鼓应用程序,我使用了KeyBindings,所以我可以用键盘触发鼓的声音。

例如,我的btnBassDrm的关键触发器是'B'。我想要做的是,当我按下'B'时,btnBassDrum(like in mouseClicked event)中按下的按钮的动画也会触发。所以实际上,你看起来真的在打鼓。

我有什么办法让这件事成为可能吗?谢谢各位!)

更多信息:

以下是我如何使用键绑定:

我有一个名为KeyBind的类,它有6个返回类型操作的方法

代码语言:javascript
复制
public static Action getSnareAction(){
        Action snareAction = new AbstractAction(){
            @Override
            public void actionPerformed(ActionEvent e){
                 try{
                    music=new FileInputStream(new File(Sound.snareSound));
                    AudioStream audios=new AudioStream(music);
                    AudioPlayer.player.start(audios);
                    }
                    catch(Exception ex){
                        JOptionPane.showMessageDialog(null,ex.getLocalizedMessage());
                    }
            }
        };

        return snareAction;
    }

然后,在我的Mainform中,我有6个方法也执行绑定。

代码语言:javascript
复制
public void snareActionKeyBind(){
        snareDrumAction = KeyBind.getSnareAction();

        InputMap inputMap = btnSnareDrum.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        inputMap.put(KeyStroke.getKeyStroke("E"), "hitSnareDrum");
        btnSnareDrum.getActionMap().put("hitSnareDrum", snareDrumAction);
    }

然后在Mainform的构造函数中调用这6个方法

代码语言:javascript
复制
public FreePlayForm() {
        initComponents();

        bassActionKeyBind();
        crashActionKeyBind();
        snareActionKeyBind();
        hihatActionKeyBind();
        rackTomActionKeyBind();
        floorTomActionKeyBind();

    }

我的表单是这样的:

每当我敲击琴键或弹奏或什么都不做的时候,情况就会是这样。它没有“被按下”的动画,就像你点击它时一样。这就是我现在的目标,那就是当你按下按键时,你就可以“按下动画”了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-16 15:20:55

创建一个Action。操作可以用作按钮的ActionListener,也可以用于给定KeyStroke的键绑定。

在Swing教程中,您可以阅读以下章节:

  1. 如何使用动作
  2. 如何使用键绑定

您可以签出:将单个动作侦听器附加到所有按钮作为一个包含操作和键绑定的示例。

编辑:

这就是我现在的目标,那就是当你按下按键时,你就可以“按下动画”了。

然后,在针对键绑定的Action绑定中,您需要在相关按钮上调用doClick(),而不是共享操作。因此,对于每个按钮,您需要2个操作

  1. 第一,播放声音
  2. 另一个按一下按钮,然后再播放声音。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36027554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档