简单Java:如何在后台创建静音和取消静音按钮?

简单Java:如何在后台创建静音和取消静音按钮?,java,audio,mute,Java,Audio,Mute,我正在做一个项目,不断地改变页面和重新绘制页面,我需要一个静音和取消静音,让音乐在背景中播放。我的问题是,每当它更改页面、重新绘制和填充内容时,音乐就会重置并停止。我是这样做的,只要鼠标按下静音/取消静音按钮,音乐就会播放或停止,这取决于它是否静音 有没有人有我可以使用的简单编码,可以创建一个静音/取消静音按钮,在后台播放音乐,而不会在每次页面更改时中断 我是在java上的eclipse上的一个小程序上做这个的 请帮我把它放低一点,因为我对java有点陌生,所以我知道的不多。谢谢 以下是页面更改

我正在做一个项目,不断地改变页面和重新绘制页面,我需要一个静音和取消静音,让音乐在背景中播放。我的问题是,每当它更改页面、重新绘制和填充内容时,音乐就会重置并停止。我是这样做的,只要鼠标按下静音/取消静音按钮,音乐就会播放或停止,这取决于它是否静音

有没有人有我可以使用的简单编码,可以创建一个静音/取消静音按钮,在后台播放音乐,而不会在每次页面更改时中断

我是在java上的eclipse上的一个小程序上做这个的

请帮我把它放低一点,因为我对java有点陌生,所以我知道的不多。谢谢

以下是页面更改的一些代码:

public void paint(Graphics g){   
    switch (roomPage){
    case 0: homeScreen(g); break;
    case 1: instructionsPage(g); break;
    case 2: startPage(g); break;
    }
}
下面是一些我希望发生的事情的代码:

public void mousePressed(MouseEvent me) {
    if (xPos > 0 && xPos < 0+64 && yPos >0 &&  
            yPos < 0+64){
        if(soundMuted == false){
         //since it's not muted and it is clicked then the music will change
         //to "soundMuted = true" and the music will stop
         soundMuted = true;
        }
        else {
        //since it will be changing to "soundMuted = false" the music will
        //start again
        soundMuted = false;
        }
    }
}
public void mousePressed(MouseEvent me){
如果(xPos>0&&xPos<0+64&&yPos>0&&
yPos<0+64){
如果(声音静音==假){
//因为它不是静音的,而且它被点击了,所以音乐会改变
//设置为“soundMuted=true”,音乐将停止
静音=真;
}
否则{
//由于它将更改为“soundMuted=false”,因此音乐将
//重新开始
静音=假;
}
}
}
但^this的问题是,每当我使用它时,它会转到另一个页面,出于某种原因,它会将其重置回默认状态,即false。我只想举一个例子来简化静音/取消静音按钮,它可以在后台不间断地播放,除非单击按钮。

因此,基于此

我将暂停/恢复功能包装为单独的方法

您需要在
JTextField
中粘贴音频文件的路径,然后按load,然后按“单击我播放”标签开始播放,按“单击我暂停”暂停播放

(在有人因为我不使用按钮而责骂我之前,OP使用的是一个
鼠标侦听器,所以我“试图”模仿我所能看到的他们很少的工作流程)

导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.EventQueue;
导入java.awt.GridBagLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.io.File;
导入java.io.IOException;
导入javax.sound.sampled.AudioFormat;
导入javax.sound.sampled.AudioInputStream;
导入javax.sound.sampled.AudioSystem;
导入javax.sound.sampled.Clip;
导入javax.sound.sampled.DataLine;
导入javax.sound.sampled.LineUnavailableException;
导入javax.sound.sampled.unsupportDaudioFileException;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
导入javax.swing.border.CompoundBorder;
导入javax.swing.border.EmptyBorder;
导入javax.swing.border.LineBorder;
公共类SimplyPlayer{
公共静态void main(字符串[]args){
新的SimplyPlayer();
}
公共SimplyPlayer(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
}
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
frame.add(newtestpane());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类TestPane扩展了JPanel{
私人剪辑;
私有JTextField音频文件;
私有帧;
公共测试窗格(){
setLayout(新的BorderLayout());
ActionListener loadAction=新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
if(clip!=null){
clip.stop();
clip.close();
}
试一试{
loadClip(新文件(audioFile.getText());
系统输出打印项次(“已加载”);
}catch(LineUnavailableException | IOException | UnsupportedAudioFileException ex){
例如printStackTrace();
}
}
};
音频文件=新的JTextField(20);
addActionListener(loadAction);
JButton load=新JButton(“load”);
load.addActionListener(loadAction);
JPanel loadPanel=newjpanel(newborderlayout());
loadPanel.add(音频文件);
加载面板。添加(加载,边界布局。东);
添加(加载面板,BorderLayout.NORTH);
JPanel panel=newjpanel(newgridbagloayout());
JLabel play=新建JLabel(“单击我播放”);
JLabel pause=新建JLabel(“单击我暂停”);
play.setboorder(新的复合边框(新的线边框(颜色.黑色),新的空边框(50,50,50,50));
暂停.设置顺序(新的复合边框(新的线边框(颜色.黑色),新的空边框(50,50,50,50));
面板。添加(播放);
面板。添加(暂停);
添加(面板);
MouseListener handler=new MouseAdapter(){
@凌驾
公共无效mouseClicked(MouseEvent e){
如果(如getSource()==播放){
恢复();
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;

public class SimplyPlayer {

    public static void main(String[] args) {
        new SimplyPlayer();
    }

    public SimplyPlayer() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private Clip clip;
        private JTextField audioFile;
        private int lastFrame;

        public TestPane() {
            setLayout(new BorderLayout());

            ActionListener loadAction = new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (clip != null) {
                        clip.stop();
                        clip.close();
                    }

                    try {
                        loadClip(new File(audioFile.getText()));
                        System.out.println("loaded");
                    } catch (LineUnavailableException | IOException | UnsupportedAudioFileException ex) {
                        ex.printStackTrace();
                    }
                }
            };

            audioFile = new JTextField(20);
            audioFile.addActionListener(loadAction);

            JButton load = new JButton("Load");
            load.addActionListener(loadAction);

            JPanel loadPanel = new JPanel(new BorderLayout());
            loadPanel.add(audioFile);
            loadPanel.add(load, BorderLayout.EAST);

            add(loadPanel, BorderLayout.NORTH);

            JPanel panel = new JPanel(new GridBagLayout());

            JLabel play = new JLabel("Click me to play");
            JLabel pause = new JLabel("Click me to pause");

            play.setBorder(new CompoundBorder(new LineBorder(Color.BLACK), new EmptyBorder(50, 50, 50, 50)));
            pause.setBorder(new CompoundBorder(new LineBorder(Color.BLACK), new EmptyBorder(50, 50, 50, 50)));

            panel.add(play);
            panel.add(pause);

            add(panel);

            MouseListener handler = new MouseAdapter() {

                @Override
                public void mouseClicked(MouseEvent e) {
                    if (e.getSource() == play) {
                        resume();
                    } else if (e.getSource() == pause) {
                        pause();
                    }
                }

            };

            play.addMouseListener(handler);
            pause.addMouseListener(handler);

        }

        protected void loadClip(File audioFile) throws LineUnavailableException, IOException, UnsupportedAudioFileException {

            AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile);

            AudioFormat format = audioStream.getFormat();
            DataLine.Info info = new DataLine.Info(Clip.class, format);
            this.clip = (Clip) AudioSystem.getLine(info);
            this.clip.open(audioStream);

        }

        public void pause() {

            if (clip != null && clip.isRunning()) {
                lastFrame = clip.getFramePosition();
                System.out.println("Stop");
                clip.stop();
            }

        }

        public void resume() {

            if (clip != null && !clip.isRunning()) {
                // Make sure we haven't passed the end of the file...
                if (lastFrame < clip.getFrameLength()) {
                    clip.setFramePosition(lastFrame);
                } else {
                    clip.setFramePosition(0);
                }
                System.out.println("Start");
                clip.start();
            }

        }
    }

}