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