簡體   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