首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java:在JFileChooser中,当双击文件/文件夹时,如何停止显示绝对文件路径?

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

Stack Overflow用户
提问于 2015-06-24 05:36:09
回答 1查看 417关注 0票数 0

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

有时,文本字段包含太长的完整文件路径(例如,打开的文件夹在文件夹之间嵌套得很深),从而屏蔽了文件名。其他情况下,当用户保存文件时,可以保存具有文件名的文件,只要是文本字段中的内容,在这种情况下,文件路径就是文件名。

如何摆脱这种行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-24 05:36:09

下面是如何改变行为的方法:

首先,需要这个方法来扫描JFileChooser中的所有组件:

代码语言:javascript
运行
复制
@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;
}

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

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

代码语言:javascript
运行
复制
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将不再在文本字段中显示长文件路径。现在看起来好多了。您可能需要处理打开文件后,双击您自己。

希望你觉得这有点帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31018372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档