2015-08-07 2 views
1

Я хочу кнопку, чтобы сделать звук, но после всего одного щелчка. Но продолжает играть снова и снова при нажатии. Как сделать звуковые эффекты, а затем снова воспроизвести на следующей странице.Как сделать кнопку выполнить действие один раз

Вот код

Private void buttonMouseClicked 
Audioinput audio =AudioStream.getAudioInputStream(this.get class().getResource ("/AppPackage/BH/chr.wav")); 
Clip clip =AudioSystem.getClip(); 
clip.open(audio); 
clip.start(); 

Я просто хочу, чтобы убедиться, что notin происходит, когда рядом эта конкретная кнопка нажата.

+0

Отформатируйте код, как описано [здесь] (http://stackoverflow.com/help/formatting): _выберите блок кода и нажмите ctrl K_. – Xebax

ответ

0

Вы можете поместить глобальную логическую переменную и изначально установить ее в значение false. Когда нажата кнопка мыши, сначала проверьте, если переменная является ложной, прежде чем продолжить воспроизведение звука. Не продолжайте, если переменная истинна. Если переменная ложна, вы можете установить ее в true, а затем продолжить код, чтобы начать воспроизведение звука.

boolean isPlaying = false; 

private void buttonMouseClicked() { 
    if (isPlaying) return; 
    isPlaying = true; 

    AudioInputStream audio; 
    try { 
     audio = AudioSystem.getAudioInputStream(getClass().getResource("/AppPackage/BH/chr.wav")); 
     Clip clip; 
     clip = AudioSystem.getClip(); 
     clip.open(audio); 
     clip.start(); 
    } catch (UnsupportedAudioFileException ex) { 
     ex.printStackTrace(); 
    } catch (LineUnavailableException ex) { 
     ex.printStackTrace(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    }   
} 

Может быть, какая-то часть вашей программы есть код для обнаружения, если звук закончил играть, вы можете установить переменную обратно ложь там, так что вы можете играть аудио снова при нажатии на кнопку.

+0

Извините, можете сделать это более четко, используя netbeans. Спасибо – chopsticks

+0

Большое спасибо, что, если я делаю то же самое для табло, например, каждый раз, когда нажимается кнопка, добавляется только 10 баллов, но вместо этого 10 всегда добавляется для той же кнопки, что и нажата, вот код – chopsticks

+0

@chopsticks. Я с радостью отвечу на ваш вопрос. Но, похоже, это еще одна тема. Если вы в порядке с моим ответом на текущий вопрос выше, пожалуйста, подумайте о его принятии. Затем отправьте другой вопрос, и я отвечу на него. –

0

Для кнопки, которую вы только хотите, чтобы действовать один раз, вы можете использовать setEnabled (ложь) после того, как одно действие:

JButton myButton = new JButton("Only works once"); 
myButton.addActionListener(e -> { 
    // Code for thing i only do once. 
    // ... 
    myButton.setEnabled(false); 
}); 

Для JLabel я должен использовать MouseListener вместо ActionListener. MouseAdapter - это MouseListener с методами, которые мне не нужны. Это означает, что отключить его не поможет, и мне нужно добавить дополнительную переменную, чтобы сохранить тот факт, что она уже нажата.

JLabel myLabel = new JLabel("label you can click on once"); 
myLabel.addMouseListener(new MouseAdapter() { 

     boolean alreadyclicked = false; 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      if(!alreadyclicked) { 
       // Code for doing stuff I only want to do once. 
       alreadyclicked = true; 
      } 
     } 
}); 
+0

Мне очень жаль, что я не объясняю эту вещь хорошо, я использую jlabel, имя переменной которой равно B. Поэтому, пожалуйста, как мне заставить ее действовать один раз. Извините за это, пожалуйста, Не уставайте объяснять, это поможет мне в пути. – chopsticks

+0

Спасибо, setEnabled (false) сделал трюк, но это мешает мне перейти на следующую страницу. Я не знаю, почему. Я просто добавил его к одной кнопке, но это также повлияло на следующую кнопку: – chopsticks

+0

Да, да. Звук работал. Торопиться!!!! @d_air – chopsticks

Смежные вопросы