📄 oyoahafilechooserui.java
字号:
protected class OyoahaDoubleClickListener implements MouseListener { protected JList list; public OyoahaDoubleClickListener(JList list) { this.list = list; } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { if(e.getClickCount()==2) { resetEditIndex(); cancelEdit(); } } public void mouseClicked(MouseEvent e) { } public void mouseReleased(MouseEvent e) { if(e.isPopupTrigger()) { } /*else if(e.getModifiers()!=InputEvent.BUTTON1_MASK) { return; }*/ else if(e.getClickCount()==2) { int index = list.locationToIndex(e.getPoint()); if(index >= 0) { File f = (File) list.getModel().getElementAt(index); if(getFileChooser().isTraversable(f)) { lastRowPosition = index; list.ensureIndexIsVisible(0); list.clearSelection(); getFileChooser().setCurrentDirectory(f); } else { getFileChooser().approveSelection(); } } } else if(e.getClickCount()==1) { int index = list.locationToIndex(e.getPoint()); if(index >= 0 && lastIndex == index && editing == false) { Thread thread = new Thread(new OyoahaEditCell(index)); thread.start(); } else { if(index >= 0) { setEditIndex(index); } else { resetEditIndex(); } cancelEdit(); } } else { resetEditIndex(); cancelEdit(); } list.repaint(); } } protected class OyoahaEditCell implements Runnable { protected int index; public OyoahaEditCell(int index) { this.index = index; } public void run() { try { Thread.sleep(100); if(lastIndex == index && editing == false) { editing = true; Rectangle r = list.getCellBounds(index, index); Rectangle rv = list.getVisibleRect(); currentEditingIndex = index; JTextField editCell = getEditCell(); editCell.setBounds(0,0,1,1); editCell.setVisible(true); File f = (File)list.getSelectedValue(); editCell.setText(getFileChooser().getName(f)); list.add(editCell); editCell.setBounds(editX + r.x, r.y, r.width-editX, r.height); editCell.selectAll(); } } catch(Exception e) { } } } protected class OyoahaSelectionListener implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { if(!e.getValueIsAdjusting()) { JFileChooser chooser = getFileChooser(); JList list = (JList)e.getSource(); if(chooser.isMultiSelectionEnabled()) { Object[] objects = list.getSelectedValues(); if(objects != null) { File[] files = new File[objects.length]; for(int i = 0; i < objects.length; i++) { files[i] = (File)objects[i]; }//System.out.println("chooser.setSelectedFiles " + files.length); chooser.setSelectedFiles(files); } } else { File file = (File)list.getSelectedValue(); if(file != null) { chooser.setSelectedFile(file); } } } } } /* private Action approveSelectionAction = new OyoahaApproveSelectionAction(); public Action getApproveSelectionAction() {System.out.println("getApproveSelectionAction " + approveSelectionAction); return approveSelectionAction; }*/ /** * Responds to an Open or Save request *//* protected class OyoahaApproveSelectionAction extends AbstractAction { protected OyoahaApproveSelectionAction() { super("approveSelection"); } public void actionPerformed(ActionEvent e) { if (isDirectorySelected()) { File dir = getDirectory(); if (dir != null) { try { // Strip trailing ".." dir = dir.getCanonicalFile(); } catch (IOException ex) { // Ok, use f as is } getFileChooser().setCurrentDirectory(dir); return; } } JFileChooser chooser = getFileChooser(); String filename = getFileName(); FileSystemView fs = chooser.getFileSystemView(); File dir = chooser.getCurrentDirectory(); if (filename != null) { // Remove whitespace from beginning and end of filename filename = filename.trim(); } if (filename == null || filename.equals("")) { // no file selected, multiple selection off, therefore cancel the approve action//resetGlobFilter(); return; } File selectedFile = null; File[] selectedFiles = null; if (filename != null && !filename.equals("")) { // Unix: Resolve '~' to user's home directory if (File.separatorChar == '/') { if (filename.startsWith("~/")) { filename = System.getProperty("user.home") + filename.substring(1); } else if (filename.equals("~")) { filename = System.getProperty("user.home"); } } if (chooser.isMultiSelectionEnabled() && filename.startsWith("\"")) { ArrayList fList = new ArrayList(); filename = filename.substring(1); if (filename.endsWith("\"")) { filename = filename.substring(0, filename.length()-1); } do { String str; int i = filename.indexOf("\" \""); if (i > 0) { str = filename.substring(0, i); filename = filename.substring(i+3); } else { str = filename; filename = ""; } File file = fs.createFileObject(str); if (!file.isAbsolute()) { file = fs.getChild(dir, str); } fList.add(file); } while (filename.length() > 0); if (fList.size() > 0) { selectedFiles = (File[])fList.toArray(new File[fList.size()]); } //resetGlobFilter(); } else { selectedFile = fs.createFileObject(filename); if(!selectedFile.isAbsolute()) { selectedFile = fs.getChild(dir, filename); } // check for wildcard pattern /*FileFilter currentFilter = chooser.getFileFilter(); if (!selectedFile.exists() && isGlobPattern(filename)) { if (globFilter == null) { globFilter = new GlobFilter(); } globFilter.setPattern(filename); if (!(currentFilter instanceof GlobFilter)) { actualFileFilter = currentFilter; } chooser.setFileFilter(null); chooser.setFileFilter(globFilter); return; } resetGlobFilter();*//* // Check for directory change action boolean isDir = (selectedFile != null && selectedFile.isDirectory()); boolean isTrav = (selectedFile != null && chooser.isTraversable(selectedFile)); boolean isDirSelEnabled = chooser.isDirectorySelectionEnabled(); boolean isFileSelEnabled = chooser.isFileSelectionEnabled(); if (isDir && isTrav && !isDirSelEnabled) { chooser.setCurrentDirectory(selectedFile); return; } else if ((isDir || !isFileSelEnabled) && (!isDir || !isDirSelEnabled) && (!isDirSelEnabled || selectedFile.exists())) { selectedFile = null; } } } if (selectedFiles != null || selectedFile != null) { if (selectedFiles != null) { chooser.setSelectedFiles(selectedFiles); } else if (chooser.isMultiSelectionEnabled()) { chooser.setSelectedFiles(new File[] { selectedFile }); } else { chooser.setSelectedFile(selectedFile); } chooser.approveSelection(); } else { if (chooser.isMultiSelectionEnabled()) { chooser.setSelectedFiles(null); } else { chooser.setSelectedFile(null); } chooser.cancelSelection(); } } } /*private void resetGlobFilter() { if (actualFileFilter != null) { JFileChooser chooser = getFileChooser(); FileFilter currentFilter = chooser.getFileFilter(); if (currentFilter != null && currentFilter.equals(globFilter)) { chooser.setFileFilter(actualFileFilter); chooser.removeChoosableFileFilter(globFilter); } actualFileFilter = null; } } private static boolean isGlobPattern(String filename) { return ((File.separatorChar == '\\' && filename.indexOf('*') >= 0) || (File.separatorChar == '/' && (filename.indexOf('*') >= 0 || filename.indexOf('?') >= 0 || filename.indexOf('[') >= 0))); }*/ /* A file filter which accepts file patterns containing * the special wildcard '*' on windows, plus '?', and '[ ]' on Unix. */ /*class GlobFilter extends FileFilter { Pattern pattern; String globPattern; public void setPattern(String globPattern) { char[] gPat = globPattern.toCharArray(); char[] rPat = new char[gPat.length * 2]; boolean isWin32 = (File.separatorChar == '\\'); boolean inBrackets = false; StringBuffer buf = new StringBuffer(); int j = 0; this.globPattern = globPattern; if (isWin32) { // On windows, a pattern ending with *.* is equal to ending with * int len = gPat.length; if (globPattern.endsWith("*.*")) { len -= 2; } for (int i = 0; i < len; i++) { if (gPat[i] == '*') { rPat[j++] = '.'; } rPat[j++] = gPat[i]; } } else { for (int i = 0; i < gPat.length; i++) { switch(gPat[i]) { case '*': if (!inBrackets) { rPat[j++] = '.'; } rPat[j++] = '*'; break; case '?': rPat[j++] = inBrackets ? '?' : '.'; break; case '[': inBrackets = true; rPat[j++] = gPat[i]; if (i < gPat.length - 1) { switch (gPat[i+1]) { case '!': case '^': rPat[j++] = '^'; i++; break; case ']': rPat[j++] = gPat[++i]; break; } } break; case ']': rPat[j++] = gPat[i]; inBrackets = false; break; case '\\': if (i == 0 && gPat.length > 1 && gPat[1] == '~') { rPat[j++] = gPat[++i]; } else { rPat[j++] = '\\'; if (i < gPat.length - 1 && "*?[]".indexOf(gPat[i+1]) >= 0) { rPat[j++] = gPat[++i]; } else { rPat[j++] = '\\'; } } break; default: //if ("+()|^$.{}<>".indexOf(gPat[i]) >= 0) { if (!Character.isLetterOrDigit(gPat[i])) { rPat[j++] = '\\'; } rPat[j++] = gPat[i]; break; } } } this.pattern = Pattern.compile(new String(rPat, 0, j), Pattern.CASE_INSENSITIVE); } public boolean accept(File f) { if (f == null) { return false; } if (f.isDirectory()) { return true; } return pattern.matcher(f.getName()).matches(); } public String getDescription() { return globPattern; } }*/}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -