繁体   English   中英

Java:在JFileChooser中,双击文件/文件夹时如何停止显示绝对文件路径?

[英]Java: In JFileChooser, how to stop showing absolute file path when double-clicking on file/folder?

在此处输入图片说明

红色框显示了当用户双击文件夹目录时出现完整文件路径的问题。

有时,文本字段包含的完整文件路径过长(例如,打开的文件夹在文件夹之间深深地嵌套),从而阻塞了文件名。 有时,当用户保存文件时,可以使用文件名保存文件,只要该文件名在文本字段中即可,在这种情况下,将文件路径作为文件名。

如何摆脱这种行为?

更改行为的方法如下:

首先,您需要此方法来搜索JFileChooser中的所有组件:

@SuppressWarnings("unchecked")
private JList<Class<?>> findFileList(Component comp){
    if (comp instanceof JList){
        return (JList<Class<?>>) comp;
    }
    if (comp instanceof Container){
        for (Component c : ((Container) comp).getComponents()){
            JList<Class<?>> list = findFileList(c);
            if (list != null){
                return list;
            }
        }
    }
    return null;
}

接下来,我们需要从所有组件的JList中找到所有可用的MouseListener,并将其全部删除。 某些MouseListener可能会注册双击并会影响文本字段显示其文本的方式。 这将有助于消除所有影响MouseListener的因素。

但是删除MouseListeners也将影响JFileChooser处理打开文件的方式。 我们需要自己处理这个动作。 这是一种简单的方法。

final JFileChooser opener = new JFileChooser();
JList<Class<?>> list = findFileList(opener);
LOOP_TEMP1: for (MouseListener l : list.getMouseListeners()){
    if (l.getClass().getName().indexOf("FilePane") >= 0){
        list.removeMouseListener(l);
        list.addMouseListener(new MouseListener(){
            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 1){
                    File file = opener.getSelectedFile();
                    if (file != null){
                        BasicFileChooserUI ui = (BasicFileChooserUI) opener.getUI();
                        ui.setFileName(file.getName());
                    }
                }
                else if (e.getClickCount() == 2){
                    File file = opener.getSelectedFile();
                    if (file != null){
                        if (file.isDirectory()){
                            opener.setCurrentDirectory(file);
                        }
                        else if (file.isFile()){
                            opener.setSelectedFile(file);
                        }
                        BasicFileChooserUI ui = (BasicFileChooserUI) opener.getUI();
                        ui.setFileName(file.getName()); 
                    }
                }
            }
            @Override
            public void mouseEntered(MouseEvent e) {
            }
            @Override
            public void mouseExited(MouseEvent e) {
            }
            @Override
            public void mousePressed(MouseEvent e) {
            }
            @Override
            public void mouseReleased(MouseEvent e) {
            }
        });
        break LOOP_TEMP1;
    }
}

现在,每当用户双击文件夹/目录时,JFileChooser将不再在文本字段中显示长文件路径。 现在看起来更好了。 双击自己后,您可能需要处理打开文件。

希望对您有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM