当前位置: 首页 > 知识库问答 >
问题:

Java swing:使用键绑定模拟按钮单击动画

叶元凯
2023-03-14

我正在制作一个鼓应用程序,我使用了键绑定,这样我就可以用键盘触发鼓的声音。

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

有什么想法可以让这成为可能吗?谢谢你们!:)

更多信息:

以下是我使用密钥绑定的方式:

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

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;
    }

在我的main表单中,我有6个方法也可以进行绑定。

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个方法

public FreePlayForm() {
        initComponents();

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

    }

每当我敲击琴键玩耍或者什么都不做的时候,我的感觉就是这样。它没有像你点击它时那样的“被按下”动画。这就是我现在的目标,当你按下按键时,让“被按下动画”。

共有1个答案

施飞鸿
2023-03-14

创建一个操作。该操作可以用作按钮的ActionListener,并且可以在给定击键的键绑定中使用。

从Swing教程中,您可以阅读以下部分:

  1. 如何使用动作

您可以查看:将单个操作侦听器附加到所有按钮以获取带有操作和键绑定的示例。

编辑:

这就是我现在的目标,当你按下按键时,让“被按下动画”。

然后,在键绑定的操作中,需要在相关按钮上调用doClick(),而不是共享该操作。因此,每个按钮需要两个动作

  1. 一个播放的声音
  2. 另一个做点击按钮,依次会播放声音
 类似资料:
  • 问题内容: 模拟按钮单击似乎是非常简单/标准的操作。但是,我无法在Jest.js测试中使用它。 这是我尝试过的(也可以使用jquery进行此操作),但似乎没有触发任何操作: 问题答案: #1使用笑话 这就是我使用笑话嘲笑回调函数来测试click事件的方式 我还使用了一个称为酶的模块 酶是一种测试实用程序,可让您更轻松地断言和选择您的React组件 #2使用Sinon 另外,您可以使用另一个称为si

  • 我正试图让JQuery在按下下一个按钮时自动单击该按钮。在互联网上,我发现应该是这样的(查看JQuery部分)。但由于某种原因,它不起作用。 它们必须在同一个代码中吗? 我尝试过的:JQuery: 表单中的按钮1 HTML: 表单中的按钮2 HTML:

  • 问题内容: 我写了一个Google Chrome扩展程序,要在其上使用扩展程序的网站要求我单击或制表到文本框(因为我认为它仅运行javaScript验证“ onClick”)。我可以使用以下扩展名在框中输入带有扩展名的文本: 但是,当我单击提交时,它认为我没有在“ input1”文本框中输入任何内容,因为我从未单击过它或在其上使用选项卡。 有人可以帮我解决这个问题吗? 问题答案: 模拟鼠标单击 我

  • 问题内容: 我正在寻找一种在OSX中模拟击键的方法。我发现了使用Objective-C的另一种解决方案针对系统范围的热键模拟按键,但是我需要使用Swift来实现。如何适应CGEventCreateKeyboardEvent? 问题答案: 链接答案上的代码可以很容易地转换为Swift代码,但是在此过程中您需要注意一些技巧: 接受a ,这是a的类型别名,但是诸如的常量被定义为as ,因此您必须将它们强

  • 我正在尝试用selenium WebDriver单击一个按钮。但无法识别按钮。这是我的代码:它返回一条错误消息 NoSuchelementException:消息:u'没有这样的元素:找不到元素:{“method”:“XPath”,“Selector”:“//*[@id=”ArtifactContentList“]/div[2]/div/div[3]/content-dataset-actions

  • 问题内容: 使用jQuery,如何在单击链接时模拟(触发?)KeyPress?例如,当用户单击以下链接时: 然后,通过单击链接,就好像他们按下了键盘上的“空格键”一样。 像这样,我假设: 关于如何实现这一目标的任何想法? 问题答案: jQuery的keypress事件旨在完成这种工作。您可以通过将字符串“keypress”传递给.trigger()来触发事件。但是,更具体地说,您实际上也可以传递j