[英]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.