2016-04-04 19 views
0
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(); 
} 
} 

所以基本上我有圖片的4個按鈕的網格,和我想使它所以當你點擊每個畫一個聲音播放。我爲其中一個按鈕實現了它,但是我迄今爲止嘗試使其爲其他3個按鈕工作的一切都沒有成功。我以爲我只會複製test.addActionListener(new ActionListener() {並用'test1'替換'test',但那不是我也試圖在該循環中添加一個'else if catch',以便如果e.getSource() == test那麼它將播放其中一個聲音,else if e.getSource() == test2它會發揮另一個,但沒有工作我創建播放點擊時聲音的JButton的 - 我如何實施上更多的按鈕

+1

_「未成功」__如何?發生了什麼?你做了什麼來排除故障? –

+0

我試圖做一個'else if'結構來獲得其他聲音,當你點擊不同的picutres時。 'test.addActionListener(新的ActionListener(){ 公共無效的actionPerformed(ActionEvent的五){ 如果(e.getSource()==測試){ 嘗試{ playSound( 「Leonardo.wav」); }趕上(異常x){x.printStackTrace();} } else if(e.getSource()== test1){ 嘗試playSound(「Jim.wav」);' – archer

+0

@archer是否有任何異常或錯誤你看到了嗎? –

回答

2

正如其他人在評論中所說,你的代碼工作得很好。

我下載Netbeans的只是爲了看看你:P

這裏是代碼如預期運行:

enter image description here

下面是我用的ActionListener代碼(與2個不同的聲音測試):

test.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) 
    { 
    playSound("C:\\Users\\DarkTussin\\Music\\Beep.wav"); 
    JOptionPane.showMessageDialog(null, "Beep1 Just Went Off"); 
    } 
}); 
test1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) 
    { 
    playSound("C:\\Users\\DarkTussin\\Music\\Beep2.wav"); 
    JOptionPane.showMessageDialog(null, "Beep2 Just Went Off"); 
    } 
}); 
test2.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) 
    { 
    playSound("C:\\Users\\DarkTussin\\Music\\Beep.wav"); 
    JOptionPane.showMessageDialog(null, "Beep3 (Beep.wav) Just Went Off"); 
    } 
}); 
test3.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) 
    { 
    playSound("C:\\Users\\DarkTussin\\Music\\Beep.wav"); 
    JOptionPane.showMessageDialog(null, "Beep4 (Beep.wav) Just Went Off"); 
    } 
}); 
+1

好吧,謝謝你,我顯然以某種方式錯誤地實現了新的動作監聽器,因爲它告訴我沒有'package test2'這樣的東西,所以我想我是在做一個}之前; – archer

+0

對於相似類型的數據,「Array」總是一個更好的主意,而不是複製粘貼代碼。是不是? –

1

我做了幾乎相同的事情,它也適用於我。我也對聲音加載做了一些改進。

package helloworld; 

import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.BorderLayout; 
import java.io.File; 
import java.util.HashMap; 
import java.util.Map; 

/** 
* Created by matt on 4/4/16. 
*/ 
public class PlaySounds { 
    Map<String, Clip> sounds = new HashMap<>(); 
    public PlaySounds(){ 
     loadResources("A.wav"); 
     loadResources("B.wav"); 
    } 

    public void loadResources(String soundName){ 
     try 
     { 
      AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(soundName).getAbsoluteFile()); 
      Clip clip = AudioSystem.getClip(); 
      clip.open(audioInputStream); 
      sounds.put(soundName, clip); 
     } 
     catch(Exception ex) 
     { 
      System.out.println("Error with playing sound."); 
      ex.printStackTrace(); 
     } 
    } 
    public static void main(String[] args){ 
     JFrame frame = new JFrame(); 
     JPanel panel = new JPanel(); 
     panel.setLayout(new BorderLayout()); 
     JButton a = new JButton("A"); 
     JButton b = new JButton("B"); 

     PlaySounds sounds = new PlaySounds(); 

     a.addActionListener(evt->{ 
      sounds.playSound("A.wav"); 
     }); 

     b.addActionListener(evt->{ 
      sounds.playSound("B.wav"); 
     }); 

     panel.add(a, BorderLayout.WEST); 
     panel.add(b, BorderLayout.EAST); 

     frame.setContentPane(panel); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 

    } 

    public void playSound(String soundName){ 
     Clip c = sounds.get(soundName); 
     c.setFramePosition(0); 
     c.start(); 
    } 
} 

而不是每次點擊時加載聲音,我開始程序時加載聲音。

在標題中回答你的問題。我添加了兩個動作監聽器,每個按鈕可以播放不同的聲音。

+0

非常感謝! – archer

相關問題