⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 metalfilechooserui.java

📁 Mobile 应用程序使用 Java Micro Edition (Java ME) 平台
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * @(#)MetalFileChooserUI.java	1.94 07/06/04 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package javax.swing.plaf.metal;import javax.swing.*;import javax.swing.border.EmptyBorder;import javax.swing.filechooser.*;import javax.swing.event.*;import javax.swing.plaf.*;import javax.swing.plaf.basic.*;import javax.swing.table.*;import java.awt.*;import java.awt.event.*;import java.beans.*;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.util.*;import javax.accessibility.*;import sun.awt.shell.ShellFolder;import sun.swing.*;import sun.swing.SwingUtilities2;/** * Metal L&F implementation of a FileChooser. * * @version 1.94 06/04/07 * @author Jeff Dinkins */public class MetalFileChooserUI extends BasicFileChooserUI {    // Much of the Metal UI for JFilechooser is just a copy of    // the windows implementation, but using Metal themed buttons, lists,    // icons, etc. We are planning a complete rewrite, and hence we've    // made most things in this class private.    private JLabel lookInLabel;    private JComboBox directoryComboBox;    private DirectoryComboBoxModel directoryComboBoxModel;    private Action directoryComboBoxAction = new DirectoryComboBoxAction();    private FilterComboBoxModel filterComboBoxModel;    private JTextField fileNameTextField;    private FilePane filePane;    private JToggleButton listViewButton;    private JToggleButton detailsViewButton;    private boolean useShellFolder;    private JButton approveButton;    private JButton cancelButton;    private JPanel buttonPanel;    private JPanel bottomPanel;    private JComboBox filterComboBox;    private static final Dimension hstrut5 = new Dimension(5, 1);    private static final Dimension hstrut11 = new Dimension(11, 1);    private static final Dimension vstrut5  = new Dimension(1, 5);    private static final Insets shrinkwrap = new Insets(0,0,0,0);    // Preferred and Minimum sizes for the dialog box    private static int PREF_WIDTH = 500;    private static int PREF_HEIGHT = 326;    private static Dimension PREF_SIZE = new Dimension(PREF_WIDTH, PREF_HEIGHT);    private static int MIN_WIDTH = 500;    private static int MIN_HEIGHT = 326;    private static Dimension MIN_SIZE = new Dimension(MIN_WIDTH, MIN_HEIGHT);    private static int LIST_PREF_WIDTH = 405;    private static int LIST_PREF_HEIGHT = 135;    private static Dimension LIST_PREF_SIZE = new Dimension(LIST_PREF_WIDTH, LIST_PREF_HEIGHT);    // Labels, mnemonics, and tooltips (oh my!)    private int    lookInLabelMnemonic = 0;    private String lookInLabelText = null;    private String saveInLabelText = null;    private int    fileNameLabelMnemonic = 0;    private String fileNameLabelText = null;    private int    filesOfTypeLabelMnemonic = 0;    private String filesOfTypeLabelText = null;    private String upFolderToolTipText = null;    private String upFolderAccessibleName = null;    private String homeFolderToolTipText = null;    private String homeFolderAccessibleName = null;    private String newFolderToolTipText = null;    private String newFolderAccessibleName = null;    private String listViewButtonToolTipText = null;    private String listViewButtonAccessibleName = null;    private String detailsViewButtonToolTipText = null;    private String detailsViewButtonAccessibleName = null;    //    // ComponentUI Interface Implementation methods    //    public static ComponentUI createUI(JComponent c) {        return new MetalFileChooserUI((JFileChooser) c);    }    public MetalFileChooserUI(JFileChooser filechooser) {	super(filechooser);    }    public void installUI(JComponent c) {	super.installUI(c);    }    public void uninstallComponents(JFileChooser fc) {	fc.removeAll();	bottomPanel = null;	buttonPanel = null;    }    private class MetalFileChooserUIAccessor implements FilePane.FileChooserUIAccessor {	public JFileChooser getFileChooser() {	    return MetalFileChooserUI.this.getFileChooser();	}	public BasicDirectoryModel getModel() {	    return MetalFileChooserUI.this.getModel();	}	public JPanel createList() {	    return MetalFileChooserUI.this.createList(getFileChooser());	}	public JPanel createDetailsView() {	    return MetalFileChooserUI.this.createDetailsView(getFileChooser());	}	public boolean isDirectorySelected() {	    return MetalFileChooserUI.this.isDirectorySelected();	}	public File getDirectory() {	    return MetalFileChooserUI.this.getDirectory();	}	public Action getChangeToParentDirectoryAction() {	    return MetalFileChooserUI.this.getChangeToParentDirectoryAction();	}	public Action getApproveSelectionAction() {	    return MetalFileChooserUI.this.getApproveSelectionAction();	}	public Action getNewFolderAction() {	    return MetalFileChooserUI.this.getNewFolderAction();	}	public MouseListener createDoubleClickListener(JList list) {	    return MetalFileChooserUI.this.createDoubleClickListener(getFileChooser(),								     list);	}	public ListSelectionListener createListSelectionListener() {	    return MetalFileChooserUI.this.createListSelectionListener(getFileChooser());	}                public boolean usesShellFolder() {            return useShellFolder;        }    }    public void installComponents(JFileChooser fc) {	FileSystemView fsv = fc.getFileSystemView();	fc.setBorder(new EmptyBorder(12, 12, 11, 11));	fc.setLayout(new BorderLayout(0, 11));	filePane = new FilePane(new MetalFileChooserUIAccessor());	fc.addPropertyChangeListener(filePane);	updateUseShellFolder();	// ********************************* //	// **** Construct the top panel **** //	// ********************************* //	// Directory manipulation buttons	JPanel topPanel = new JPanel(new BorderLayout(11, 0));	JPanel topButtonPanel = new JPanel();	topButtonPanel.setLayout(new BoxLayout(topButtonPanel, BoxLayout.LINE_AXIS));	topPanel.add(topButtonPanel, BorderLayout.AFTER_LINE_ENDS);	// Add the top panel to the fileChooser	fc.add(topPanel, BorderLayout.NORTH);	// ComboBox Label     	lookInLabel = new JLabel(lookInLabelText);     	lookInLabel.setDisplayedMnemonic(lookInLabelMnemonic);	topPanel.add(lookInLabel, BorderLayout.BEFORE_LINE_BEGINS);	// CurrentDir ComboBox	directoryComboBox = new JComboBox() {	    public Dimension getPreferredSize() {		Dimension d = super.getPreferredSize();		// Must be small enough to not affect total width.		d.width = 150;		return d;	    }	};        directoryComboBox.putClientProperty(AccessibleContext.ACCESSIBLE_DESCRIPTION_PROPERTY,                                            lookInLabelText);	directoryComboBox.putClientProperty( "JComboBox.isTableCellEditor", Boolean.TRUE );	lookInLabel.setLabelFor(directoryComboBox);	directoryComboBoxModel = createDirectoryComboBoxModel(fc);	directoryComboBox.setModel(directoryComboBoxModel);	directoryComboBox.addActionListener(directoryComboBoxAction);	directoryComboBox.setRenderer(createDirectoryComboBoxRenderer(fc));	directoryComboBox.setAlignmentX(JComponent.LEFT_ALIGNMENT);	directoryComboBox.setAlignmentY(JComponent.TOP_ALIGNMENT);	directoryComboBox.setMaximumRowCount(8);	topPanel.add(directoryComboBox, BorderLayout.CENTER);	// Up Button	JButton upFolderButton = new JButton(getChangeToParentDirectoryAction());	upFolderButton.setText(null);	upFolderButton.setIcon(upFolderIcon);        upFolderButton.setToolTipText(upFolderToolTipText);        upFolderButton.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY,                                         upFolderAccessibleName);	upFolderButton.setAlignmentX(JComponent.LEFT_ALIGNMENT);	upFolderButton.setAlignmentY(JComponent.CENTER_ALIGNMENT);	upFolderButton.setMargin(shrinkwrap);	topButtonPanel.add(upFolderButton);	topButtonPanel.add(Box.createRigidArea(hstrut5));	// Home Button	File homeDir = fsv.getHomeDirectory();	String toolTipText = homeFolderToolTipText;	if (fsv.isRoot(homeDir)) {	    toolTipText = getFileView(fc).getName(homeDir); // Probably "Desktop".	}	JButton b = new JButton(homeFolderIcon);     	b.setToolTipText(toolTipText);        b.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY,                            homeFolderAccessibleName);	b.setAlignmentX(JComponent.LEFT_ALIGNMENT);	b.setAlignmentY(JComponent.CENTER_ALIGNMENT);	b.setMargin(shrinkwrap);	b.addActionListener(getGoHomeAction());	topButtonPanel.add(b);	topButtonPanel.add(Box.createRigidArea(hstrut5));	// New Directory Button	if (!UIManager.getBoolean("FileChooser.readOnly")) {	    b = new JButton(filePane.getNewFolderAction());	    b.setText(null);	    b.setIcon(newFolderIcon);	    b.setToolTipText(newFolderToolTipText);            b.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY,                                newFolderAccessibleName);	    b.setAlignmentX(JComponent.LEFT_ALIGNMENT);	    b.setAlignmentY(JComponent.CENTER_ALIGNMENT);	    b.setMargin(shrinkwrap);	}	topButtonPanel.add(b);	topButtonPanel.add(Box.createRigidArea(hstrut5));	// View button group	ButtonGroup viewButtonGroup = new ButtonGroup();	// List Button	listViewButton = new JToggleButton(listViewIcon);     	listViewButton.setToolTipText(listViewButtonToolTipText);        listViewButton.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY,                                         listViewButtonAccessibleName);	listViewButton.setSelected(true);	listViewButton.setAlignmentX(JComponent.LEFT_ALIGNMENT);	listViewButton.setAlignmentY(JComponent.CENTER_ALIGNMENT);	listViewButton.setMargin(shrinkwrap);	listViewButton.addActionListener(filePane.getViewTypeAction(FilePane.VIEWTYPE_LIST));	topButtonPanel.add(listViewButton);	viewButtonGroup.add(listViewButton);	// Details Button	detailsViewButton = new JToggleButton(detailsViewIcon);     	detailsViewButton.setToolTipText(detailsViewButtonToolTipText);        detailsViewButton.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY,                                            detailsViewButtonAccessibleName);	detailsViewButton.setAlignmentX(JComponent.LEFT_ALIGNMENT);	detailsViewButton.setAlignmentY(JComponent.CENTER_ALIGNMENT);	detailsViewButton.setMargin(shrinkwrap);	detailsViewButton.addActionListener(filePane.getViewTypeAction(FilePane.VIEWTYPE_DETAILS));	topButtonPanel.add(detailsViewButton);	viewButtonGroup.add(detailsViewButton);	filePane.addPropertyChangeListener(new PropertyChangeListener() {	    public void propertyChange(PropertyChangeEvent e) {		if ("viewType".equals(e.getPropertyName())) {		    int viewType = filePane.getViewType();		    switch (viewType) {		      case FilePane.VIEWTYPE_LIST:			listViewButton.setSelected(true);			break;		      case FilePane.VIEWTYPE_DETAILS:			detailsViewButton.setSelected(true);			break;		    }		}	    }	});	// ************************************** //	// ******* Add the directory pane ******* //	// ************************************** //	fc.add(getAccessoryPanel(), BorderLayout.AFTER_LINE_ENDS);	JComponent accessory = fc.getAccessory();	if(accessory != null) {	    getAccessoryPanel().add(accessory);	}	filePane.setPreferredSize(LIST_PREF_SIZE);	fc.add(filePane, BorderLayout.CENTER);	// ********************************** //	// **** Construct the bottom panel ** //	// ********************************** //	JPanel bottomPanel = getBottomPanel();	bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.Y_AXIS));	fc.add(bottomPanel, BorderLayout.SOUTH);	// FileName label and textfield	JPanel fileNamePanel = new JPanel();	fileNamePanel.setLayout(new BoxLayout(fileNamePanel, BoxLayout.LINE_AXIS));	bottomPanel.add(fileNamePanel);	bottomPanel.add(Box.createRigidArea(vstrut5));     	AlignedLabel fileNameLabel = new AlignedLabel(fileNameLabelText);     	fileNameLabel.setDisplayedMnemonic(fileNameLabelMnemonic);	fileNamePanel.add(fileNameLabel);	fileNameTextField = new JTextField(35) {	    public Dimension getMaximumSize() {		return new Dimension(Short.MAX_VALUE, super.getPreferredSize().height);	    }	};	fileNamePanel.add(fileNameTextField);	fileNameLabel.setLabelFor(fileNameTextField);        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()));	}	// Filetype label and combobox	JPanel filesOfTypePanel = new JPanel();	filesOfTypePanel.setLayout(new BoxLayout(filesOfTypePanel, BoxLayout.LINE_AXIS));	bottomPanel.add(filesOfTypePanel);     	AlignedLabel filesOfTypeLabel = new AlignedLabel(filesOfTypeLabelText);     	filesOfTypeLabel.setDisplayedMnemonic(filesOfTypeLabelMnemonic);	filesOfTypePanel.add(filesOfTypeLabel);	filterComboBoxModel = createFilterComboBoxModel();	fc.addPropertyChangeListener(filterComboBoxModel);	filterComboBox = new JComboBox(filterComboBoxModel);        filterComboBox.putClientProperty(AccessibleContext.ACCESSIBLE_DESCRIPTION_PROPERTY,                                         filesOfTypeLabelText);	filesOfTypeLabel.setLabelFor(filterComboBox);	filterComboBox.setRenderer(createFilterComboBoxRenderer());	filesOfTypePanel.add(filterComboBox);	// buttons	getButtonPanel().setLayout(new ButtonAreaLayout());	approveButton = new JButton(getApproveButtonText(fc));	// Note: Metal does not use mnemonics for approve and cancel	approveButton.addActionListener(getApproveSelectionAction());	approveButton.setToolTipText(getApproveButtonToolTipText(fc));	getButtonPanel().add(approveButton);	cancelButton = new JButton(cancelButtonText);	cancelButton.setToolTipText(cancelButtonToolTipText);	cancelButton.addActionListener(getCancelSelectionAction());	getButtonPanel().add(cancelButton);	if(fc.getControlButtonsAreShown()) {	    addControlButtons();	}	groupLabels(new AlignedLabel[] { fileNameLabel, filesOfTypeLabel });    }    private void updateUseShellFolder() {

⌨️ 快捷键说明

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