JSwing - 具有不同参数值的Re utilse事件处理程序

时间:2012-03-12 18:32:42

标签: java swing

我正在尝试编写电话代码,我想做的第一件事就是为每个按下的按钮分配不同的声音。

我不想写这样的十个处理程序:

private void buttonOneHandler(java.awt.event.MouseEvent evt) {

    try{

        buttonSound = AudioSystem.getClip();
        AudioInputStream ais = AudioSystem.getAudioInputStream(new File("resources/buttonOne.wav"));
        buttonSound.open(ais);
        buttonSound.loop(0);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

相反,我想使用一个唯一的处理程序,它接受一个String参数(指向wav文件的路径),以便每个按钮更改getAudioInputStream参数值。

这可能吗? 非常感谢你。

2 个答案:

答案 0 :(得分:0)

这可以通过编写单个ActionListener并使用每个按钮注册它来实现。 然后,您必须使用JButton(Action)构造函数强制按钮在单击时生成自定义操作。

这在swing教程中有所介绍: http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html

答案 1 :(得分:0)

private static class PlaySoundActionListener implements ActionListener {

    private String soundPath;

    private PlaySoundActionListener(String soundPath) {
        this.soundPath = soundPath;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // play the sound at this.soundPath
    }
}

...

button1.addActionListener(new PlaySoundActionListener("resources/buttonOne.wav"));
button2.addActionListener(new PlaySoundActionListener("resources/buttonTwo.wav"));
button3.addActionListener(new PlaySoundActionListener("resources/buttonThree.wav"));

请注意,MouseListener不适合与按钮一起使用。 ActionListener是单击按钮时调用的一个,无论单击它的方式如何(使用鼠标,键盘,键盘快捷键)。