如何保存文件名,然后使其显示在textArea中

时间:2016-05-10 23:25:00

标签: java swing jfilechooser

我正在为pdf阅读器创建一个用户界面,我希望有一个包含最近打开文件的列表。 (不是文件的内容,只是文件的名称)。

This is my picture

2 个答案:

答案 0 :(得分:1)

从snap共享中,我假设你正在使用JFileChooser来打开文件对话框。希望这有帮助!

int result = fileChooser.showOpenDialog(panel);
//where panel is an instance of a Component such as JFrame, JDialog or JPanelwhich is parent of the dialog.
if (result == JFileChooser.APPROVE_OPTION) {
    File selectedFile = fileChooser.getSelectedFile();
    textArea.setText(selectedFile.getName());
}

答案 1 :(得分:1)

以下示例使用JFileChoosersetMultiSelectionEnabled(true)add()一个或多个文件与List<File>update()一个JTextArea目前的清单。根据建议here,您可以使用Action维护最近文件的菜单或工具栏。

image

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

/**
 * @see https://stackoverflow.com/a/37153404/230513
 * @see https://stackoverflow.com/a/4039359/230513
 */
public class Test {

    private final List<File> recentFiles = new ArrayList<>();
    private final JTextArea textArea = new JTextArea(12, 12);

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        textArea.setBorder(BorderFactory.createTitledBorder("Recent Files"));
        f.add(textArea);
        JPanel p = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        p.add(new JButton(new AbstractAction("Open") {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser jfc = new JFileChooser(".");
                jfc.setMultiSelectionEnabled(true);
                if (jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
                    recentFiles.addAll(Arrays.asList(jfc.getSelectedFiles()));
                    update();
                }
            }
        }));
        f.add(p, BorderLayout.SOUTH);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    private void update() {
        textArea.setText("");
        for (File file : recentFiles) {
            textArea.append(file.getName() + "\n");
        }
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Test()::display);
    }
}