Java 我创建了一个JButton,当单击时会播放声音-如何在更多按钮上实现这一点

Java 我创建了一个JButton,当单击时会播放声音-如何在更多按钮上实现这一点,java,Java,基本上我有一个有4个图片按钮的网格,当你点击每一张图片时,我会让它播放声音。我为其中一个按钮实现了它,但是到目前为止,我为其他3个按钮所做的一切都没有成功。我想我应该复制test.addActionListener(新的ActionListener(){并用'test1'替换'test',但事实并非如此。我还尝试在播放循环中添加一个'else if catch',这样如果e.getSource()==test,它就会播放其中一个声音,else if e.getSource()==test2它会播

基本上我有一个有4个图片按钮的网格,当你点击每一张图片时,我会让它播放声音。我为其中一个按钮实现了它,但是到目前为止,我为其他3个按钮所做的一切都没有成功。我想我应该复制test.addActionListener(新的ActionListener(){并用'test1'替换'test',但事实并非如此。我还尝试在播放循环中添加一个'else if catch',这样如果
e.getSource()==test
,它就会播放其中一个声音,
else if e.getSource()==test2
它会播放另一个,但不起作用

我做了几乎相同的事情,它对我也起作用。我还在声音加载方面做了一些改进

package pkgnew;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

public class bob
{
JButton test = new JButton("");
JButton test1 = new JButton("");
JButton test2 = new JButton("");
JButton test3 = new JButton("");
JPanel panel = new JPanel();

public void playSound(String soundName)
 {
   try 
   {
    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(soundName).getAbsoluteFile());
    Clip clip = AudioSystem.getClip();
    clip.open(audioInputStream);
    clip.start();
   }
   catch(Exception ex)
   {
     System.out.println("Error with playing sound.");
     ex.printStackTrace( );
   }
 }    

 public bob() {

    JFrame frame = new JFrame("Movie Stars");
    test.setIcon(new ImageIcon("C:\\Users\\bob\\Desktop\\Leonardo.jpg"));
    test1.setIcon(new ImageIcon("C:\\Users\\bob\\Desktop\\Bruce.jpg"));
    test2.setIcon(new ImageIcon("C:\\Users\\bob\\Desktop\\Jim.jpg"));
    test3.setIcon(new ImageIcon("C:\\Users\\bob\\Desktop\\Robert.jpg"));

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.pack();
    frame.add(panel);
    frame.setSize(1000, 800);
    frame.setResizable(true);
    frame.setVisible(true);

    panel.add(test);
    panel.add(test1);
    panel.add(test2);
    panel.add(test3);

    panel = new JPanel(new GridLayout(2,2));

    test.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
         playSound("Leonardo.wav");

        }  
    }
  );
}  

public static void main(String[] args) 
{

    bob t = new bob();
} 
}
包helloworld;
导入javax.sound.sampled.AudioInputStream;
导入javax.sound.sampled.AudioSystem;
导入javax.sound.sampled.Clip;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入java.awt.BorderLayout;
导入java.io.File;
导入java.util.HashMap;
导入java.util.Map;
/**
*马特于2016年4月4日创作。
*/
公共课话音{
Map sounds=newhashmap();
公共音乐{
负荷资源(“A.wav”);
负荷资源(“B.wav”);
}
公共void加载资源(字符串soundName){
尝试
{
AudioInputStream AudioInputStream=AudioSystem.getAudioInputStream(新文件(soundName).getAbsoluteFile());
Clip Clip=AudioSystem.getClip();
clip.open(音频输入流);
sounds.put(soundName,clip);
}
捕获(例外情况除外)
{
System.out.println(“播放声音时出错”);
例如printStackTrace();
}
}
公共静态void main(字符串[]args){
JFrame=新JFrame();
JPanel面板=新的JPanel();
panel.setLayout(新的BorderLayout());
JButton a=新JButton(“a”);
JButton b=新JButton(“b”);
播放声音=新播放声音();
a、 addActionListener(evt->{
声音。播放声音(“A.wav”);
});
b、 addActionListener(evt->{
声音。播放声音(“B.wav”);
});
面板。添加(a,边界布局。西部);
面板。添加(b,边界布局。东);
frame.setContentPane(面板);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
公共void播放声音(字符串soundName){
Clip c=sounds.get(soundName);
c、 设置帧位置(0);
c、 start();
}
}
我没有在每次单击时再次加载声音,而是在启动程序时加载了声音


为了回答标题中的问题。我添加了两个动作监听器,每个按钮一个,播放不同的声音。

我做了几乎相同的事情,它也适用于我。我还在声音加载方面做了一些改进

package pkgnew;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

public class bob
{
JButton test = new JButton("");
JButton test1 = new JButton("");
JButton test2 = new JButton("");
JButton test3 = new JButton("");
JPanel panel = new JPanel();

public void playSound(String soundName)
 {
   try 
   {
    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(soundName).getAbsoluteFile());
    Clip clip = AudioSystem.getClip();
    clip.open(audioInputStream);
    clip.start();
   }
   catch(Exception ex)
   {
     System.out.println("Error with playing sound.");
     ex.printStackTrace( );
   }
 }    

 public bob() {

    JFrame frame = new JFrame("Movie Stars");
    test.setIcon(new ImageIcon("C:\\Users\\bob\\Desktop\\Leonardo.jpg"));
    test1.setIcon(new ImageIcon("C:\\Users\\bob\\Desktop\\Bruce.jpg"));
    test2.setIcon(new ImageIcon("C:\\Users\\bob\\Desktop\\Jim.jpg"));
    test3.setIcon(new ImageIcon("C:\\Users\\bob\\Desktop\\Robert.jpg"));

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.pack();
    frame.add(panel);
    frame.setSize(1000, 800);
    frame.setResizable(true);
    frame.setVisible(true);

    panel.add(test);
    panel.add(test1);
    panel.add(test2);
    panel.add(test3);

    panel = new JPanel(new GridLayout(2,2));

    test.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
         playSound("Leonardo.wav");

        }  
    }
  );
}  

public static void main(String[] args) 
{

    bob t = new bob();
} 
}
包helloworld;
导入javax.sound.sampled.AudioInputStream;
导入javax.sound.sampled.AudioSystem;
导入javax.sound.sampled.Clip;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入java.awt.BorderLayout;
导入java.io.File;
导入java.util.HashMap;
导入java.util.Map;
/**
*马特于2016年4月4日创作。
*/
公共课话音{
Map sounds=newhashmap();
公共音乐{
负荷资源(“A.wav”);
负荷资源(“B.wav”);
}
公共void加载资源(字符串soundName){
尝试
{
AudioInputStream AudioInputStream=AudioSystem.getAudioInputStream(新文件(soundName).getAbsoluteFile());
Clip Clip=AudioSystem.getClip();
clip.open(音频输入流);
sounds.put(soundName,clip);
}
捕获(例外情况除外)
{
System.out.println(“播放声音时出错”);
例如printStackTrace();
}
}
公共静态void main(字符串[]args){
JFrame=新JFrame();
JPanel面板=新的JPanel();
panel.setLayout(新的BorderLayout());
JButton a=新JButton(“a”);
JButton b=新JButton(“b”);
播放声音=新播放声音();
a、 addActionListener(evt->{
声音。播放声音(“A.wav”);
});
b、 addActionListener(evt->{
声音。播放声音(“B.wav”);
});
面板。添加(a,边界布局。西部);
面板。添加(b,边界布局。东);
frame.setContentPane(面板);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
公共void播放声音(字符串soundName){
Clip c=sounds.get(soundName);
c、 设置帧位置(0);
c、 start();
}
}
我没有在每次单击时再次加载声音,而是在启动程序时加载了声音


为了回答标题中的问题,我添加了两个动作监听器,每个按钮一个,播放不同的声音。

正如其他人在评论中所说,您的代码工作正常

我下载Netbeans只是为了帮你检查一下:p

以下是按预期工作的代码:

下面是我使用的ActionListener代码(使用两种不同的声音进行测试):


正如其他人在评论中所说,您的代码工作得很好

我下载Netbeans只是为了帮你检查一下:p

以下是按预期工作的代码:

下面是我使用的ActionListener代码(使用两种不同的声音进行测试):


“没有成功”--怎么回事?发生了什么事?你做了什么来排除故障?我尝试使用“else-if”结构,以便在单击不同的图片时播放其他声音。
test.addActionListener(new ActionListener(){public void actionPerformed(ActionE
test.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
     playSound("C:\\Users\\DT\\Music\\Beep.wav");
     JOptionPane.showMessageDialog(null, "Beep1 Just Went Off");
    }  
});
test1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
     playSound("C:\\Users\\DT\\Music\\Beep2.wav");
     JOptionPane.showMessageDialog(null, "Beep2 Just Went Off");
    }  
});
test2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
     playSound("C:\\Users\\DT\\Music\\Beep.wav");
     JOptionPane.showMessageDialog(null, "Beep3 (Beep.wav) Just Went Off");
    }  
});
test3.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
     playSound("C:\\Users\\DT\\Music\\Beep.wav");
     JOptionPane.showMessageDialog(null, "Beep4 (Beep.wav) Just Went Off");
    }  
});