windowsfilechooserui.java

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

JAVA
1,257
字号
        filenameTextField.addFocusListener(	    new FocusAdapter() {		public void focusGained(FocusEvent e) {		    if (!getFileChooser().isMultiSelectionEnabled()) {			filePane.clearSelection();		    }		}	    }        );	if (fc.isMultiSelectionEnabled()) {	    setFileName(fileNameString(fc.getSelectedFiles()));	} else {	    setFileName(fileNameString(fc.getSelectedFile()));	}	fileAndFilterPanel.add(filenameTextField);	fileAndFilterPanel.add(Box.createRigidArea(vstrut8));	filterComboBoxModel = createFilterComboBoxModel();	fc.addPropertyChangeListener(filterComboBoxModel);	filterComboBox = new JComboBox(filterComboBoxModel);	ftl.setLabelFor(filterComboBox);	filterComboBox.setRenderer(createFilterComboBoxRenderer());	fileAndFilterPanel.add(filterComboBox);	getBottomPanel().add(fileAndFilterPanel);	getBottomPanel().add(Box.createRigidArea(new Dimension(30, 0)));	// buttons	getButtonPanel().setLayout(new BoxLayout(getButtonPanel(), BoxLayout.Y_AXIS));	approveButton = new JButton(getApproveButtonText(fc)) {	    public Dimension getMaximumSize() {		return approveButton.getPreferredSize().width > cancelButton.getPreferredSize().width ?		       approveButton.getPreferredSize() : cancelButton.getPreferredSize();	    }	}; 	Insets buttonMargin = approveButton.getMargin();	buttonMargin = new InsetsUIResource(buttonMargin.top,    buttonMargin.left  + 5,					    buttonMargin.bottom, buttonMargin.right + 5);	approveButton.setMargin(buttonMargin);	approveButton.setMnemonic(getApproveButtonMnemonic(fc));	approveButton.addActionListener(getApproveSelectionAction());	approveButton.setToolTipText(getApproveButtonToolTipText(fc));	getButtonPanel().add(Box.createRigidArea(vstrut6));	getButtonPanel().add(approveButton);	getButtonPanel().add(Box.createRigidArea(vstrut4));	cancelButton = new JButton(cancelButtonText) {	    public Dimension getMaximumSize() {		return approveButton.getPreferredSize().width > cancelButton.getPreferredSize().width ?		       approveButton.getPreferredSize() : cancelButton.getPreferredSize();	    }	}; 	cancelButton.setMargin(buttonMargin);	cancelButton.setToolTipText(cancelButtonToolTipText);	cancelButton.addActionListener(getCancelSelectionAction());	getButtonPanel().add(cancelButton);	if(fc.getControlButtonsAreShown()) {	    addControlButtons();	}    }    private void updateUseShellFolder() {	// Decide whether to use the ShellFolder class to populate shortcut	// panel and combobox.	JFileChooser fc = getFileChooser();	Boolean prop =	    (Boolean)fc.getClientProperty("FileChooser.useShellFolder");	if (prop != null) {	    useShellFolder = prop.booleanValue();	} else {	    // See if FileSystemView.getRoots() returns the desktop folder,	    // i.e. the normal Windows hierarchy.	    useShellFolder = false;	    File[] roots = fc.getFileSystemView().getRoots();	    if (roots != null && roots.length == 1) {		File[] cbFolders = (File[])ShellFolder.get("fileChooserComboBoxFolders");		if (cbFolders != null && cbFolders.length > 0 && roots[0] == cbFolders[0]) {		    useShellFolder = true;		}	    }	}	if (OS_VERSION.compareTo("4.9") >= 0) {	// Windows Me/2000 and later (4.90/5.0)	    if (useShellFolder) {		if (placesBar == null && !UIManager.getBoolean("FileChooser.noPlacesBar")) {		    placesBar = new WindowsPlacesBar(fc, XPStyle.getXP() != null);		    fc.add(placesBar, BorderLayout.BEFORE_LINE_BEGINS);		    fc.addPropertyChangeListener(placesBar);		}	    } else {		if (placesBar != null) {		    fc.remove(placesBar);		    fc.removePropertyChangeListener(placesBar);		    placesBar = null;		}	    }	}    }    protected JPanel getButtonPanel() {	if(buttonPanel == null) {	    buttonPanel = new JPanel();	}	return buttonPanel;    }    protected JPanel getBottomPanel() {	if(bottomPanel == null) {	    bottomPanel = new JPanel();	}	return bottomPanel;    }    protected void installStrings(JFileChooser fc) {	super.installStrings(fc);        Locale l = fc.getLocale();	lookInLabelMnemonic = UIManager.getInt("FileChooser.lookInLabelMnemonic"); 	lookInLabelText = UIManager.getString("FileChooser.lookInLabelText",l);	saveInLabelText = UIManager.getString("FileChooser.saveInLabelText",l);		fileNameLabelMnemonic = UIManager.getInt("FileChooser.fileNameLabelMnemonic");  	fileNameLabelText = UIManager.getString("FileChooser.fileNameLabelText",l); 		filesOfTypeLabelMnemonic = UIManager.getInt("FileChooser.filesOfTypeLabelMnemonic");  	filesOfTypeLabelText = UIManager.getString("FileChooser.filesOfTypeLabelText",l); 		upFolderToolTipText =  UIManager.getString("FileChooser.upFolderToolTipText",l);	upFolderAccessibleName = UIManager.getString("FileChooser.upFolderAccessibleName",l); 		homeFolderToolTipText =  UIManager.getString("FileChooser.homeFolderToolTipText",l);	homeFolderAccessibleName = UIManager.getString("FileChooser.homeFolderAccessibleName",l); 		newFolderToolTipText = UIManager.getString("FileChooser.newFolderToolTipText",l);	newFolderAccessibleName = UIManager.getString("FileChooser.newFolderAccessibleName",l); 		listViewButtonToolTipText = UIManager.getString("FileChooser.listViewButtonToolTipText",l); 	listViewButtonAccessibleName = UIManager.getString("FileChooser.listViewButtonAccessibleName",l); 		detailsViewButtonToolTipText = UIManager.getString("FileChooser.detailsViewButtonToolTipText",l); 	detailsViewButtonAccessibleName = UIManager.getString("FileChooser.detailsViewButtonAccessibleName",l);     }    protected void installListeners(JFileChooser fc) {	super.installListeners(fc);        ActionMap actionMap = getActionMap();        SwingUtilities.replaceUIActionMap(fc, actionMap);    }    protected ActionMap getActionMap() {        return createActionMap();    }    protected ActionMap createActionMap() {        ActionMap map = new ActionMapUIResource();	FilePane.addActionsToMap(map, filePane.getActions());        return map;    }        protected JPanel createList(JFileChooser fc) {	return filePane.createList();    }    protected JPanel createDetailsView(JFileChooser fc) {	return filePane.createDetailsView();    }    /**     * Creates a selection listener for the list of files and directories.     *     * @param fc a <code>JFileChooser</code>     * @return a <code>ListSelectionListener</code>     */    public ListSelectionListener createListSelectionListener(JFileChooser fc) {	return super.createListSelectionListener(fc);    }    // Obsolete class, not used in this version.    protected class WindowsNewFolderAction extends NewFolderAction {    }    // Obsolete class, not used in this version.    protected class SingleClickListener extends MouseAdapter {    }    // Obsolete class, not used in this version.    protected class FileRenderer extends DefaultListCellRenderer  {    }    public void uninstallUI(JComponent c) {	// Remove listeners	c.removePropertyChangeListener(filterComboBoxModel);	c.removePropertyChangeListener(filePane);	if (placesBar != null) {	    c.removePropertyChangeListener(placesBar);	}	cancelButton.removeActionListener(getCancelSelectionAction());	approveButton.removeActionListener(getApproveSelectionAction());	filenameTextField.removeActionListener(getApproveSelectionAction());	if (filePane != null) {	    filePane.uninstallUI();	    filePane = null;	}	super.uninstallUI(c);    }    /**     * Returns the preferred size of the specified     * <code>JFileChooser</code>.     * The preferred size is at least as large,     * in both height and width,     * as the preferred size recommended     * by the file chooser's layout manager.     *     * @param c  a <code>JFileChooser</code>     * @return   a <code>Dimension</code> specifying the preferred     *           width and height of the file chooser     */    public Dimension getPreferredSize(JComponent c) {	int prefWidth = PREF_SIZE.width;	Dimension d = c.getLayout().preferredLayoutSize(c);	if (d != null) {	    return new Dimension(d.width < prefWidth ? prefWidth : d.width,				 d.height < PREF_SIZE.height ? PREF_SIZE.height : d.height);	} else {	    return new Dimension(prefWidth, PREF_SIZE.height);	}    }    /**     * Returns the minimum size of the <code>JFileChooser</code>.     *     * @param c  a <code>JFileChooser</code>     * @return   a <code>Dimension</code> specifying the minimum     *           width and height of the file chooser     */    public Dimension getMinimumSize(JComponent c) {	return MIN_SIZE;    }    /**     * Returns the maximum size of the <code>JFileChooser</code>.     *     * @param c  a <code>JFileChooser</code>     * @return   a <code>Dimension</code> specifying the maximum      *           width and height of the file chooser     */    public Dimension getMaximumSize(JComponent c) {	return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);    }    private String fileNameString(File file) {	if (file == null) {	    return null;	} else {	    JFileChooser fc = getFileChooser();	    if ((fc.isDirectorySelectionEnabled() && !fc.isFileSelectionEnabled()) || 	        (fc.isDirectorySelectionEnabled() && fc.isFileSelectionEnabled() && fc.getFileSystemView().isFileSystemRoot(file))){		return file.getPath();	    } else {		return file.getName();	    }	}    }    private String fileNameString(File[] files) {	StringBuffer buf = new StringBuffer();	for (int i = 0; files != null && i < files.length; i++) {	    if (i > 0) {		buf.append(" ");	    }	    if (files.length > 1) {		buf.append("\"");	    }	    buf.append(fileNameString(files[i]));	    if (files.length > 1) {		buf.append("\"");	    }	}	return buf.toString();    }    /* The following methods are used by the PropertyChange Listener */    private void doSelectedFileChanged(PropertyChangeEvent e) {	File f = (File) e.getNewValue();	JFileChooser fc = getFileChooser();	if (f != null 	    && ((fc.isFileSelectionEnabled() && !f.isDirectory())		|| (f.isDirectory() && fc.isDirectorySelectionEnabled()))) {	    setFileName(fileNameString(f));	}    }        private void doSelectedFilesChanged(PropertyChangeEvent e) {	File[] files = (File[]) e.getNewValue();	JFileChooser fc = getFileChooser();	if (files != null	    && files.length > 0	    && (files.length > 1 || fc.isDirectorySelectionEnabled() || !files[0].isDirectory())) {	    setFileName(fileNameString(files));	}    }        private void doDirectoryChanged(PropertyChangeEvent e) {	JFileChooser fc = getFileChooser();	FileSystemView fsv = fc.getFileSystemView();	clearIconCache();	File currentDirectory = fc.getCurrentDirectory();	if(currentDirectory != null) {	    directoryComboBoxModel.addItem(currentDirectory);	    if (fc.isDirectorySelectionEnabled() && !fc.isFileSelectionEnabled()) {		if (fsv.isFileSystem(currentDirectory)) {		    setFileName(currentDirectory.getPath());		} else {		    setFileName(null);		}	    }	}    }    private void doFilterChanged(PropertyChangeEvent e) {	clearIconCache();    }    private void doFileSelectionModeChanged(PropertyChangeEvent e) {	clearIconCache();	JFileChooser fc = getFileChooser();	File currentDirectory = fc.getCurrentDirectory();	if (currentDirectory != null	    && fc.isDirectorySelectionEnabled()	    && !fc.isFileSelectionEnabled()	    && fc.getFileSystemView().isFileSystem(currentDirectory)) {	    setFileName(currentDirectory.getPath());	} else {	    setFileName(null);	}    }    private void doAccessoryChanged(PropertyChangeEvent e) {	if(getAccessoryPanel() != null) {	    if(e.getOldValue() != null) {		getAccessoryPanel().remove((JComponent) e.getOldValue());	    }	    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.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)) {

⌨️ 快捷键说明

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