我正在尝试编写电话代码,我想做的第一件事就是为每个按下的按钮分配不同的声音。
我不想写这样的十个处理程序:
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
参数值。
这可能吗? 非常感谢你。
答案 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是单击按钮时调用的一个,无论单击它的方式如何(使用鼠标,键盘,键盘快捷键)。