Java: JFileChooser如何在textField中显示所选文件

3

我有一个JFileChooser,能够在控制台上打印出绝对路径。

我需要在用户选择文件后立即将文件路径显示在文本字段中。

以下是代码,请告诉我如何实现。

        public void actionPerformed(ActionEvent ae) {

        JFileChooser fileChooser = new JFileChooser();
        int showOpenDialog = fileChooser.showOpenDialog(frame);

        if (showOpenDialog != JFileChooser.APPROVE_OPTION) return;

如果您需要其他详细信息,请告诉我。


如果您知道如何获取所选文件的绝对路径,为什么不将其直接放入文本字段中呢? - Thomas
1
请告诉我是否需要其他细节。你尝试了什么?(参考链接:http://mattgemmell.com/2008/12/08/what-have-you-tried/) - Andrew Thompson
嗨,Thomas,谢谢你的回复。我尝试将其放入文本字段中,但是文本字段没有任何变化。 - Ananthavel Sundararajan
嗨,安德鲁,我尝试使用JfileChooser将文件上传到AWS s3服务器,我能够成功上传文件,但我需要显示正在上传的文件路径。 - Ananthavel Sundararajan
3个回答

5

您需要关注在使用JFileChooser时发生的更改,可以看以下代码片段:

JFileChooser chooser = new JFileChooser();

// Add listener on chooser to detect changes to selected file
chooser.addPropertyChangeListener(new PropertyChangeListener() {
    public void propertyChange(PropertyChangeEvent evt) {
        if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY
                .equals(evt.getPropertyName())) {
            JFileChooser chooser = (JFileChooser)evt.getSource();
            File oldFile = (File)evt.getOldValue();
            File newFile = (File)evt.getNewValue();

            // The selected file should always be the same as newFile
            File curFile = chooser.getSelectedFile();
        } else if (JFileChooser.SELECTED_FILES_CHANGED_PROPERTY.equals(
                evt.getPropertyName())) {
            JFileChooser chooser = (JFileChooser)evt.getSource();
            File[] oldFiles = (File[])evt.getOldValue();
            File[] newFiles = (File[])evt.getNewValue();

            // Get list of selected files
            // The selected files should always be the same as newFiles
            File[] files = chooser.getSelectedFiles();
        }
    }
}) ;

在第一个条件语句中,您需要将文本字段的值设置为与新选择的文件名匹配。请参考以下示例:
yourTextfield.setText(chooser.getSelectedFile().getName());

或者只需
yourTextfield.setText(curFile.getName());

你需要的是File类中的getName()方法。请自行使用API文档查看每个方法的作用。


仅显示名称是一个糟糕的想法,特别是当OP明确声明“我需要在文本字段中显示FilePath”时。请更改您的帖子,以免让我降低投票。 - Andrew Thompson
@Andrew,我不精通英语或沟通。但是我可以在未来的帖子中提高自己。 - Ananthavel Sundararajan
@sfrj:我的客户要求我将TextField更改为JLabel,我已经完成了。 - Ananthavel Sundararajan
1
@Andrew Thompson 我相信他会在API文档中找到展示路径的方法(我认为是getPath()或getCannonicalPath()),我认为这不是什么大问题。我不认为这是一个down voting的理由。1-我建议阅读文档,2-我给出了一个例子而不是解决方案。 - javing
@Ananthavel Sundararajan 不用担心,JTextField和JLabel在它们的方法上非常相似,我几乎可以确定,即使你将其应用于JLabel类型的对象,它也会起作用。 - javing

1
您可以使用此代码在文本字段中显示路径。
if(fileChooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) {
    textField.setText(fileChooser.getSelectedFile().getAbsolutePath());
}

0

使用Genhis所说的方法,请查看完整的代码块,以获取一个“浏览”按钮,将文件路径放置在相应的JTextField中。

        JButton btnNewButton = new JButton("Browse");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {             
            JFileChooser fc = new JFileChooser();
            fc.setCurrentDirectory(new java.io.File("C:/Users"));
            fc.setDialogTitle("File Browser.");
            fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
            if (fc.showOpenDialog(btnNewButton) == JFileChooser.APPROVE_OPTION){
                textField.setText(fc.getSelectedFile().getAbsolutePath());
            }
        }
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接