2017-03-07 23 views
0
final JFileChooser fc = new JFileChooser(); 
    File[] files = fc.getSelectedFiles(); 

    private void showTxtFileFrame() { 
     fc.setMultiSelectionEnabled(true); 
     fc.setCurrentDirectory(new File(System.getProperty("user.home"))); 
     int result = fc.showOpenDialog(this); 
     if(result == JFileChooser.APPROVE_OPTION) { 
      textfield1.setText(fc.getSelectedFile().getAbsolutePath()); 
    } 

我想选择多个文件并将它们列在我的文本字段中。我能够选择多个文件,但它只显示单个文件的绝对路径。JFileChooser在JTextField中显示多个选定文件

+0

见编辑回答,请。 –

回答

4

首先,我会在GUI组件中显示多个文件路径,以更好地显示多个对象,如JList。另外,JFileChooser API会告诉你哪种方法只返回一个文件,并返回一个数组File[]getSelectedFiles()。结束时请注意s

但是,当然,您不能将数组放入JTextField中,但我猜测您一旦得到数据就知道该如何处理数据。

此外,这是没有意义的:

final JFileChooser fc = new JFileChooser(); 
File[] files = fc.getSelectedFiles(); 

既然你实际显示的文件选择对话框之前调用getSelectedFiles()。你想要做的就是调用的方法你的showTxtFileFrame()方法,就像你现在打电话getSelectedFile()一样。


例如:

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.KeyEvent; 
import java.io.File; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class JFileChooserExample extends JPanel { 
    // use a list model and JList that works *directly* with Files 
    private DefaultListModel<File> fileListModel = new DefaultListModel<>(); 
    private JList<File> fileJList = new JList<>(fileListModel); 

    public JFileChooserExample() { 
     JPanel buttonPanel = new JPanel(); 
     buttonPanel.add(new JButton(new SelectFilesAction("Select Files", KeyEvent.VK_S))); 

     // help set the width and height of the JList 
     fileJList.setVisibleRowCount(10); 
     fileJList.setPrototypeCellValue(new File("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); 
     JScrollPane scrollPane = new JScrollPane(fileJList); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 

     setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); 
     setLayout(new BorderLayout(3, 3)); 
     add(buttonPanel, BorderLayout.PAGE_START); 
     add(scrollPane, BorderLayout.CENTER); 
    } 

    private class SelectFilesAction extends AbstractAction { 
     public SelectFilesAction(String name, int mnemonic) { 
      super(name); 
      putValue(MNEMONIC_KEY, mnemonic); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      JFileChooser fc = new JFileChooser(); 
      fc.setMultiSelectionEnabled(true); 
      fc.setCurrentDirectory(new File(System.getProperty("user.home"))); 
      int result = fc.showOpenDialog(JFileChooserExample.this); 
      if(result == JFileChooser.APPROVE_OPTION) { 
       fileListModel.clear(); // clear the model of prior files 
       File[] files = fc.getSelectedFiles(); 
       for (File file : files) { 
        // add all files to the model 
        fileListModel.addElement(file); 
       } 
      } 
     } 
    } 

    private static void createAndShowGui() { 
     JFileChooserExample mainPanel = new JFileChooserExample(); 

     JFrame frame = new JFrame("JFileChooser Example"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 
相关问题