【问题标题】:How do I create a jToggle button that will pause when pressed twice?如何创建一个在按下两次时会暂停的切换按钮?
【发布时间】:2017-08-08 04:34:30
【问题描述】:

我一直在绞尽脑汁试图让这个循环的 wav 在第二次点击时暂停, 我哪里错了?

private void jToggleButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                               
        JToggleButton btn = (JToggleButton) evt.getSource(); 
            if (btn.isSelected()) { 
            try { 
                String soundName = "yourSound.wav";
                AudioInputStream audioInputStream = null;
                try {
                    audioInputStream = AudioSystem.getAudioInputStream(new File(soundName).getAbsoluteFile());
                } catch (UnsupportedAudioFileException | IOException ex) {
                    Logger.getLogger(GEN.class.getName()).log(Level.SEVERE, null, ex);
                }
                Clip clip = null;
                try {
                    clip = AudioSystem.getClip();
                } catch (LineUnavailableException ex) {
                    Logger.getLogger(GEN.class.getName()).log(Level.SEVERE, null, ex);
                }
                clip.open(audioInputStream);
                clip.start();
                clip.loop(100);
            } catch (LineUnavailableException | IOException ex) {
                Logger.getLogger(GEN.class.getName()).log(Level.SEVERE, null, ex);
            }
            } else { 
            try {
} 

【问题讨论】:

  • 切换按钮应该只有两种状态。您可以查看this SO 回答以了解如何获取按钮的状态。
  • 注册这两个状态不是问题,我已经用打印输出功能对此进行了测试,我的问题是在注册第二次点击时让循环音频停止
  • Clip 对象上有一个stop 方法可用。在方法之外定义剪辑。如果未切换按钮,则剪辑不为空且剪辑isRunning() 然后stop()
  • 非常感谢!我真的很感谢你抽出时间伸出援助之手!我试着定义 |私人剪辑剪辑;但它与 Clip clip = null;有冲突,只需将其删除即可修复它,它就像做梦一样!

标签: java netbeans toggle


【解决方案1】:

对 OP 有帮助的解决方案概要:

private Clip clip; // declared outside the method

private void jToggleButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    JToggleButton btn = (JToggleButton) evt.getSource();
    if (btn.isSelected()) {
        // initialize `clip` variable, if not done already
        // call start() if not running
    } else {
        if (clip != null && clip.isRunning()) {
            clip.stop();
        }
    }
}

【讨论】:

    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2010-09-23
    • 2015-08-24
    • 1970-01-01
    相关资源
    最近更新 更多