2011-06-30 35 views
0

名单在回答这个问题:I want to make a java program in which there is a combobox which displays the titles of all the files available in a folder返回音频文件类型

实施答案被带到了我的注意的另一种方法;使用AudioSystem.getAudioFileTypes()返回指定文件夹中的所有支持的音频文件。我是一个相当经验的编码器,在我给出的答案是无法融入这个方法

File someFolder = new File("pathname"); 

Object[] wavFiles = someFolder.listFiles(wavExtensionFilenameFilter); 
JComboBox songComboBox = new JComboBox(wavFiles); 

谁能告诉我如何做到这一点呢?

回答

4

以下来源将显示特定于Java Sound可理解的文件类型的JFileChooser。一旦用户选择任何声音剪辑,应用程序。将获得该目录中所有剪辑的列表并将其显示在组合中。

Sound clip list

在选择从组合的剪辑,我们可以play the sound in a javax.sound.sample.Clip(使用Java API的声音或其他方式),而是我们选择。对于使用Desktop来打开文件(在系统默认播放器中)的1.6+'单行'。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.filechooser.FileNameExtensionFilter; 
import javax.sound.sampled.*; 
import java.io.*; 

class GetSoundsByFileType { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       AudioFileFormat.Type[] formatTypes = AudioSystem.getAudioFileTypes(); 
       String[] types = new String[formatTypes.length]; 
       for(int ii=0; ii<types.length; ii++) { 
        types[ii] = formatTypes[ii].getExtension(); 
       } 

       FileTypesFilter fileTypesFilter = new FileTypesFilter(types); 
       // Just to confuse things, JFileChooser accepts a 
       // different type of filter! 
       FileNameExtensionFilter extensionFilter = 
        new FileNameExtensionFilter("Sound clips", types); 
       JFileChooser fc = new JFileChooser(); 
       fc.setAcceptAllFileFilterUsed(false); 
       fc.addChoosableFileFilter(extensionFilter); 

       int result = fc.showOpenDialog(null); 
       if (result==JFileChooser.APPROVE_OPTION) { 
        File startAt = fc.getSelectedFile(); 

        startAt = startAt.getParentFile(); 
        File[] files = startAt.listFiles(fileTypesFilter); 

        final JComboBox clipCombo = new JComboBox(files); 
        clipCombo.addActionListener(new ActionListener(){ 
          // 1.6+ 
          Desktop desktop = Desktop.getDesktop(); 

          public void actionPerformed(ActionEvent ae) { 
           try { 
            desktop.open((File)clipCombo.getSelectedItem()); 
           } catch(Exception e) { 
            e.printStackTrace(); 
           } 
          } 
         }); 

        JOptionPane.showMessageDialog(null, clipCombo); 
       } 
      } 
     }); 
    } 
} 

class FileTypesFilter implements FilenameFilter { 

    private String[] types; 

    FileTypesFilter(String[] types) { 
     this.types = types; 
    } 

    public boolean accept(File dir, String name) { 
     for (String type:types) { 
      if (name.toLowerCase().endsWith(type.toLowerCase())) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 
+0

我想补充一点,我看到我的错误是我认为我可以保留我的答案只是几行,仍然实现AudioSystem.getAudioFileTypes()。感谢您的详细回复,它已经澄清了很多事情:) –

+0

对于'少数几条'的答案,我认为你的最终答案是好的。 OTOH这仅仅是73行,对于一个完整的文件选择器的独立示例! ;) –