windowsfilechooserui.java

来自「JAVA 所有包」· Java 代码 · 共 1,257 行 · 第 1/3 页

JAVA
1,257
字号
		    doApproveButtonMnemonicChanged(e);		} else if(s.equals(JFileChooser.CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY)) {		    doControlButtonsChanged(e);		} else if (s == "FileChooser.useShellFolder") {		    updateUseShellFolder();		    doDirectoryChanged(e);		} else if (s.equals("componentOrientation")) {		    ComponentOrientation o = (ComponentOrientation)e.getNewValue();		    JFileChooser cc = (JFileChooser)e.getSource();		    if (o != (ComponentOrientation)e.getOldValue()) {			cc.applyComponentOrientation(o);		    }		} else if (s.equals("ancestor")) {		    if (e.getOldValue() == null && e.getNewValue() != null) {			// Ancestor was added, set initial focus			filenameTextField.selectAll();			filenameTextField.requestFocus();		    }		}	    }	};    }    protected void removeControlButtons() {	getBottomPanel().remove(getButtonPanel());    }    protected void addControlButtons() {	getBottomPanel().add(getButtonPanel());    }    public void ensureFileIsVisible(JFileChooser fc, File f) {	filePane.ensureFileIsVisible(fc, f);    }    public void rescanCurrentDirectory(JFileChooser fc) {	filePane.rescanCurrentDirectory();    }    public String getFileName() {	if(filenameTextField != null) {	    return filenameTextField.getText();	} else {	    return null;	}    }    public void setFileName(String filename) {	if(filenameTextField != null) {	    filenameTextField.setText(filename);	}    }    /**     * Property to remember whether a directory is currently selected in the UI.     * This is normally called by the UI on a selection event.     *     * @param directorySelected if a directory is currently selected.     * @since 1.4     */    protected void setDirectorySelected(boolean directorySelected) {	super.setDirectorySelected(directorySelected);	JFileChooser chooser = getFileChooser();	if(directorySelected) {	    approveButton.setText(directoryOpenButtonText);	    approveButton.setToolTipText(directoryOpenButtonToolTipText);	    approveButton.setMnemonic(directoryOpenButtonMnemonic);	} else {	    approveButton.setText(getApproveButtonText(chooser));	    approveButton.setToolTipText(getApproveButtonToolTipText(chooser));	    approveButton.setMnemonic(getApproveButtonMnemonic(chooser));	}    }    public String getDirectoryName() {	// PENDING(jeff) - get the name from the directory combobox	return null;    }    public void setDirectoryName(String dirname) {	// PENDING(jeff) - set the name in the directory combobox    }    protected DirectoryComboBoxRenderer createDirectoryComboBoxRenderer(JFileChooser fc) {	return new DirectoryComboBoxRenderer();    }    //    // Renderer for DirectoryComboBox    //    class DirectoryComboBoxRenderer extends DefaultListCellRenderer  {	IndentIcon ii = new IndentIcon();	public Component getListCellRendererComponent(JList list, Object value,						      int index, boolean isSelected,						      boolean cellHasFocus) {	    super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);	    if (value == null) {		setText("");		return this;	    }	    File directory = (File)value;	    setText(getFileChooser().getName(directory));	    Icon icon = getFileChooser().getIcon(directory);	    ii.icon = icon;	    ii.depth = directoryComboBoxModel.getDepth(index);	    setIcon(ii);	    return this;	}    }    final static int space = 10;    class IndentIcon implements Icon {	Icon icon = null;	int depth = 0;	public void paintIcon(Component c, Graphics g, int x, int y) {	    if (c.getComponentOrientation().isLeftToRight()) {		icon.paintIcon(c, g, x+depth*space, y);	    } else {		icon.paintIcon(c, g, x, y);	    }	}	public int getIconWidth() {	    return icon.getIconWidth() + depth*space;	}	public int getIconHeight() {	    return icon.getIconHeight();	}    }    //    // DataModel for DirectoryComboxbox    //    protected DirectoryComboBoxModel createDirectoryComboBoxModel(JFileChooser fc) {	return new DirectoryComboBoxModel();    }    /**     * Data model for a type-face selection combo-box.     */    protected class DirectoryComboBoxModel extends AbstractListModel implements ComboBoxModel {	Vector directories = new Vector();	int[] depths = null;	File selectedDirectory = null;	JFileChooser chooser = getFileChooser();	FileSystemView fsv = chooser.getFileSystemView();	public DirectoryComboBoxModel() {	    // Add the current directory to the model, and make it the	    // selectedDirectory	    File dir = getFileChooser().getCurrentDirectory();	    if(dir != null) {		addItem(dir);	    }	}	/**	 * Adds the directory to the model and sets it to be selected,	 * additionally clears out the previous selected directory and	 * the paths leading up to it, if any.	 */	private void addItem(File directory) {	    if(directory == null) {		return;	    }	    directories.clear();	    File[] baseFolders;	    if (useShellFolder) {		baseFolders = (File[])ShellFolder.get("fileChooserComboBoxFolders");	    } else {		baseFolders = fsv.getRoots();	    }	    directories.addAll(Arrays.asList(baseFolders));	    // Get the canonical (full) path. This has the side	    // benefit of removing extraneous chars from the path,	    // for example /foo/bar/ becomes /foo/bar	    File canonical = null;	    try {		canonical = directory.getCanonicalFile();	    } catch (IOException e) {		// Maybe drive is not ready. Can't abort here.		canonical = directory;	    }	    // create File instances of each directory leading up to the top	    try {		File sf = useShellFolder ? ShellFolder.getShellFolder(canonical)					 : canonical;		File f = sf;		Vector path = new Vector(10);		do {		    path.addElement(f);		} while ((f = f.getParentFile()) != null);		int pathCount = path.size();		// Insert chain at appropriate place in vector		for (int i = 0; i < pathCount; i++) {		    f = (File)path.get(i);		    if (directories.contains(f)) {			int topIndex = directories.indexOf(f);			for (int j = i-1; j >= 0; j--) {			    directories.insertElementAt(path.get(j), topIndex+i-j);			}			break;		    }		}		calculateDepths();		setSelectedItem(sf);	    } catch (FileNotFoundException ex) {		calculateDepths();	    }	}	private void calculateDepths() {	    depths = new int[directories.size()];	    for (int i = 0; i < depths.length; i++) {		File dir = (File)directories.get(i);		File parent = dir.getParentFile();		depths[i] = 0;		if (parent != null) {		    for (int j = i-1; j >= 0; j--) {			if (parent.equals((File)directories.get(j))) {			    depths[i] = depths[j] + 1;			    break;			}		    }		}	    }	}	public int getDepth(int i) {	    return (depths != null && i >= 0 && i < depths.length) ? depths[i] : 0;	}	public void setSelectedItem(Object selectedDirectory) {	    this.selectedDirectory = (File)selectedDirectory;            fireContentsChanged(this, -1, -1);	}	public Object getSelectedItem() {	    return selectedDirectory;	}	public int getSize() {	    return directories.size();	}	public Object getElementAt(int index) {	    return directories.elementAt(index);	}    }    //    // Renderer for Types ComboBox    //    protected FilterComboBoxRenderer createFilterComboBoxRenderer() {	return new FilterComboBoxRenderer();    }    /**     * Render different type sizes and styles.     */    public class FilterComboBoxRenderer extends DefaultListCellRenderer {	public Component getListCellRendererComponent(JList list,	    Object value, int index, boolean isSelected,	    boolean cellHasFocus) {	    super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);	    if (value != null && value instanceof FileFilter) {		setText(((FileFilter)value).getDescription());	    }	    return this;	}    }    //    // DataModel for Types Comboxbox    //    protected FilterComboBoxModel createFilterComboBoxModel() {	return new FilterComboBoxModel();    }    /**     * Data model for a type-face selection combo-box.     */    protected class FilterComboBoxModel extends AbstractListModel implements ComboBoxModel, PropertyChangeListener {	protected FileFilter[] filters;	protected FilterComboBoxModel() {	    super();	    filters = getFileChooser().getChoosableFileFilters();	}	public void propertyChange(PropertyChangeEvent e) {	    String prop = e.getPropertyName();	    if(prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) {		filters = (FileFilter[]) e.getNewValue();		fireContentsChanged(this, -1, -1);	    } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) {		fireContentsChanged(this, -1, -1);	    }	}	public void setSelectedItem(Object filter) {	    if(filter != null) {		getFileChooser().setFileFilter((FileFilter) filter);		fireContentsChanged(this, -1, -1);	    }	}	public Object getSelectedItem() {	    // Ensure that the current filter is in the list.	    // NOTE: we shouldnt' have to do this, since JFileChooser adds	    // the filter to the choosable filters list when the filter	    // is set. Lets be paranoid just in case someone overrides	    // setFileFilter in JFileChooser.	    FileFilter currentFilter = getFileChooser().getFileFilter();	    boolean found = false;	    if(currentFilter != null) {		for(int i=0; i < filters.length; i++) {		    if(filters[i] == currentFilter) {			found = true;		    }		}		if(found == false) {		    getFileChooser().addChoosableFileFilter(currentFilter);		}	    }	    return getFileChooser().getFileFilter();	}	public int getSize() {	    if(filters != null) {		return filters.length;	    } else {		return 0;	    }	}	public Object getElementAt(int index) {	    if(index > getSize() - 1) {		// This shouldn't happen. Try to recover gracefully.		return getFileChooser().getFileFilter();	    }	    if(filters != null) {		return filters[index];	    } else {		return null;	    }	}    }    public void valueChanged(ListSelectionEvent e) {	JFileChooser fc = getFileChooser();	File f = fc.getSelectedFile();	if (!e.getValueIsAdjusting() && f != null && !getFileChooser().isTraversable(f)) {	    setFileName(fileNameString(f));	}    }    /**     * Acts when DirectoryComboBox has changed the selected item.     */    protected class DirectoryComboBoxAction implements ActionListener {	public void actionPerformed(ActionEvent e) {	    File f = (File)directoryComboBox.getSelectedItem();	    getFileChooser().setCurrentDirectory(f);	}    }    protected JButton getApproveButton(JFileChooser fc) {	return approveButton;    }    public FileView getFileView(JFileChooser fc) {	return fileView;    }    // ***********************    // * FileView operations *    // ***********************    protected class WindowsFileView extends BasicFileView {	/* FileView type descriptions */	public Icon getIcon(File f) {	    Icon icon = getCachedIcon(f);	    if (icon != null) {		return icon;	    }	    if (f != null) {		icon = getFileChooser().getFileSystemView().getSystemIcon(f);	    }	    if (icon == null) {		icon = super.getIcon(f);	    }	    cacheIcon(f, icon);	    return icon;	}    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?