Java 如何在JFileChooser窗口中选择多个文件
我不知道如何在JFileChooser窗口中一次选择多个文件。我想它已经启用了,因为我在JFileChooser对象上使用了Java 如何在JFileChooser窗口中选择多个文件,java,swing,jframe,awt,jfilechooser,Java,Swing,Jframe,Awt,Jfilechooser,我不知道如何在JFileChooser窗口中一次选择多个文件。我想它已经启用了,因为我在JFileChooser对象上使用了setMultiSelectionEnabled(true)方法,但是当我尝试实际选择多个对象时,我不能这样做。我试过点击并拖动、CTRL和箭头键/点击、Alt和箭头键/点击、Shift和箭头键/点击,但仍然没有成功。我该怎么做 创建JFileChooser的代码: 当只使用一个文件时,解析方法工作正常。 在JFrame中按下按钮时调用此类 public class Fil
setMultiSelectionEnabled(true)
方法,但是当我尝试实际选择多个对象时,我不能这样做。我试过点击并拖动、CTRL和箭头键/点击、Alt和箭头键/点击、Shift和箭头键/点击,但仍然没有成功。我该怎么做
创建JFileChooser的代码:
当只使用一个文件时,解析方法工作正常。
在JFrame中按下按钮时调用此类
public class FileChooser implements ActionListener, Runnable
{
private Parser parser = new Parser();
private static File[] selectedFiles;
private static File currentSelected;
private JFileChooser jfc;
public static File getSelectedFile()
{
return currentSelected;
}
public void actionPerformed(ActionEvent actionEvent)
{
new Thread(this).start();
}
public void run()
{
if ( Window.bFG5IsPressed() && Window.bFGAIsPressed() )
{
jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
jfc.setMultiSelectionEnabled(true);
int returnValue = jfc.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION)
{
selectedFiles = jfc.getSelectedFiles();
for (File e : selectedFiles) {
currentSelected = e;
parser.parseAll(e.getAbsolutePath());
}
}
}
else if ( Window.bFG5IsPressed() )
{
jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
int returnValue = jfc.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION)
{
selectedFiles = jfc.getSelectedFiles();
for (File e : selectedFiles) {
currentSelected = e;
parser.parseFG5(e.getAbsolutePath());
}
}
}
else if ( Window.bFGAIsPressed() )
{
jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
int returnValue = jfc.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION)
{
selectedFiles = jfc.getSelectedFiles();
for (File e : selectedFiles) {
currentSelected = e;
parser.parseFGA(e.getAbsolutePath());
}
}
}
else
{
JOptionPane x = new JOptionPane();
x.showMessageDialog(x, "Escolher tipo de arquivo");
x.setLocation(300,300);
x.setVisible(true);
}
}
}调用setMultiSelectionEnabled(true)。以下是一个运行示例:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Arrays;
public class MultipleFileChooser extends JFrame {
public static void main(String[] args) {
MultipleFileChooser multipleFileChooser = new MultipleFileChooser();
JFileChooser fileChooser = new JFileChooser();
fileChooser.setMultiSelectionEnabled(true);
JButton button = new JButton("Open Files");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int choice = fileChooser.showOpenDialog(multipleFileChooser);
if (choice == JFileChooser.APPROVE_OPTION) {
File[] openFiles = fileChooser.getSelectedFiles();
System.out.println("Files: " + Arrays.toString(openFiles));
}
}
});
JPanel panel = new JPanel();
panel.add(button);
multipleFileChooser.add(panel);
multipleFileChooser.setSize(new Dimension(400, 400));
multipleFileChooser.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
multipleFileChooser.setVisible(true);
}
}
附上截图供OP参考:
您什么时候使用了
设置MultiSelectionEnabled
?显示一个“请”。@realpointer我在创建JFrame@JoeyJohnJo请核对答案中的样本。无论您是否能够选择多个文件,请运行此命令。如果需要,请将其与代码进行比较。如果没有,请告诉我。您不应该创建线程。所有Swing组件都应该在事件分派线程(EDT)上更新。侦听器代码不会在EDT上执行。因此,不仅你的代码是错误的,它更复杂。我将考虑到这一点,并从线程中删除文件选择器。感谢you@joeyjohnjo无论您是否能够选择多个文件,请运行此命令。如果需要,请将其与代码进行比较。如果没有,那么让我知道。我做了这个,但没有运气。你是说你运行了这个示例程序,但它不起作用?您使用的操作系统是什么?你能从其他应用程序(如文本编辑器等)中选择多个文件吗?我测试了你的代码,它对我有效。我假设setMultiSelectionEnabled是为您所做的,所以我也添加了代码,但它不再工作。请看我的编辑,我添加了整个类,谢谢你,我看到你在另一个线程中创建了文件选择器。在不同的线程中创建UI可能会很混乱。是否可以尝试直接从actionPerformed()
方法打开文件选择器,而不是从run()
方法创建线程和调用?我不确定您的用例,但请尝试一下并让我知道。