gpt4 book ai didi

java - JFileChooser 在 JTextField 中显示多个选定的文件

转载 作者:行者123 更新时间:2023-12-01 16:49:52 25 4
gpt4 key购买 nike

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());
}

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

最佳答案

一方面,我会在更适合显示多个对象(例如 JList)的 GUI 组件中显示多个文件路径。另一方面,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());
}
}

关于java - JFileChooser 在 JTextField 中显示多个选定的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42659864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com