windowsfilechooserui.java

来自「java jdk 1.4的源码」· Java 代码 · 共 2,088 行 · 第 1/5 页

JAVA
2,088
字号
	    }	    JComponent accessory = (JComponent) e.getNewValue();	    if(accessory != null) {		getAccessoryPanel().add(accessory, BorderLayout.CENTER);	    }	}    }    private void doApproveButtonTextChanged(PropertyChangeEvent e) {	JFileChooser chooser = getFileChooser();	approveButton.setText(getApproveButtonText(chooser));	approveButton.setToolTipText(getApproveButtonToolTipText(chooser));	approveButton.setMnemonic(getApproveButtonMnemonic(chooser));    }    private void doDialogTypeChanged(PropertyChangeEvent e) {	JFileChooser chooser = getFileChooser();	approveButton.setText(getApproveButtonText(chooser));	approveButton.setToolTipText(getApproveButtonToolTipText(chooser));	approveButton.setMnemonic(getApproveButtonMnemonic(chooser));	if (chooser.getDialogType() == JFileChooser.SAVE_DIALOG) {	    lookInLabel.setText(saveInLabelText);	} else {	    lookInLabel.setText(lookInLabelText);	}    }    private void doApproveButtonMnemonicChanged(PropertyChangeEvent e) {	approveButton.setMnemonic(getApproveButtonMnemonic(getFileChooser()));    }    private void doControlButtonsChanged(PropertyChangeEvent e) {	if(getFileChooser().getControlButtonsAreShown()) {	    addControlButtons();	} else {	    removeControlButtons();	}    }    /*     * Listen for filechooser property changes, such as     * the selected file changing, or the type of the dialog changing.     */    public PropertyChangeListener createPropertyChangeListener(JFileChooser fc) {	return new PropertyChangeListener() {	    public void propertyChange(PropertyChangeEvent e) {		String s = e.getPropertyName();		if(s.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {		    doSelectedFileChanged(e);		} else if (s.equals(JFileChooser.SELECTED_FILES_CHANGED_PROPERTY)) {		    doSelectedFilesChanged(e);		} else if(s.equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY)) {		    doDirectoryChanged(e);		} else if(s.equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) {		    doFilterChanged(e);		} else if(s.equals(JFileChooser.FILE_SELECTION_MODE_CHANGED_PROPERTY)) {		    doFileSelectionModeChanged(e);		} else if(s.equals(JFileChooser.MULTI_SELECTION_ENABLED_CHANGED_PROPERTY)) {		    doMultiSelectionChanged(e);		} else if(s.equals(JFileChooser.ACCESSORY_CHANGED_PROPERTY)) {		    doAccessoryChanged(e);		} else if (s.equals(JFileChooser.APPROVE_BUTTON_TEXT_CHANGED_PROPERTY) ||			   s.equals(JFileChooser.APPROVE_BUTTON_TOOL_TIP_TEXT_CHANGED_PROPERTY)) { 		    doApproveButtonTextChanged(e);		} else if(s.equals(JFileChooser.DIALOG_TYPE_CHANGED_PROPERTY)) {		    doDialogTypeChanged(e);		} else if(s.equals(JFileChooser.APPROVE_BUTTON_MNEMONIC_CHANGED_PROPERTY)) {		    doApproveButtonMnemonicChanged(e);		} else if(s.equals(JFileChooser.CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY)) {		    doControlButtonsChanged(e);		} else if (s.equals("componentOrientation")) {		    ComponentOrientation o = (ComponentOrientation)e.getNewValue();		    JFileChooser cc = (JFileChooser)e.getSource();		    if (o != (ComponentOrientation)e.getOldValue()) {			cc.applyComponentOrientation(o);		    }		    if (detailsTable != null) {			detailsTable.setComponentOrientation(o);			detailsTable.getParent().getParent().setComponentOrientation(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());    }    private void ensureIndexIsVisible(int i) {	if (i >= 0) {	    list.ensureIndexIsVisible(i);	    if (detailsTable != null) {		detailsTable.scrollRectToVisible(detailsTable.getCellRect(i, COLUMN_FILENAME, true));	    }	}    }    public void ensureFileIsVisible(JFileChooser fc, File f) {	ensureIndexIsVisible(getModel().indexOf(f));    }    public void rescanCurrentDirectory(JFileChooser fc) {	getModel().validateFileCache();    }    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 = ShellFolder.getShellFolder(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);		setFileName(null);		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(curren

⌨️ 快捷键说明

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