JSwing - повторно использовать обработчик событий с другим значением параметра - PullRequest
0 голосов
/ 12 марта 2012

Я пытаюсь кодировать телефон, и первое, что я хотел сделать, это назначить разные звуки для каждой нажатой кнопки.

Я не хочу писать десять обработчиков, таких как этот:

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 голосов
/ 13 марта 2012
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 - это тот, который вызывается при нажатии кнопки и независимо от способа нажатия (с помощью мыши, клавиатуры, сочетания клавиш).

0 голосов
/ 12 марта 2012

Это возможно, написав один ActionListener и зарегистрировав его для каждой кнопки.Затем вам нужно будет использовать конструктор JButton (Action), чтобы заставить кнопку сгенерировать ваше собственное действие при нажатии.

Это описано в руководстве по качанию: http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...