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

📄 metalfilechooserui.java

📁 java jdk 1.4的源码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/* * @(#)MetalFileChooserUI.java	1.69 03/02/17 * * Copyright 2003 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 javax.swing.text.Position;import java.awt.*;import java.awt.event.*;import java.beans.*;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.text.DateFormat;import java.util.*;import sun.awt.shell.ShellFolder;/** * Metal L&F implementation of a FileChooser. * * @version 1.69 02/17/03 * @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 JPanel centerPanel;    private JLabel lookInLabel;    private JComboBox directoryComboBox;    private DirectoryComboBoxModel directoryComboBoxModel;    private Action directoryComboBoxAction = new DirectoryComboBoxAction();    private FilterComboBoxModel filterComboBoxModel;    private JTextField fileNameTextField;    private JToggleButton listViewButton;    private JToggleButton detailsViewButton;    private JPanel listViewPanel;    private JPanel detailsViewPanel;    private JPanel currentViewPanel;    private FocusListener editorFocusListener = new FocusAdapter() {	public void focusLost(FocusEvent e) {	    if (! e.isTemporary()) {		applyEdit();	    }	}    };    private boolean useShellFolder;    private ListSelectionModel listSelectionModel;    private JList list;    private JTable detailsTable;    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);    private static final int COLUMN_FILENAME = 0;    private static final int COLUMN_FILESIZE = 1;    private static final int COLUMN_FILETYPE = 2;    private static final int COLUMN_FILEDATE = 3;    private static final int COLUMN_FILEATTR = 4;    private static final int COLUMN_COLCOUNT = 5;    private int[] COLUMN_WIDTHS = { 150,  75,  130,  130,  40 };    // 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;    private String fileNameHeaderText = null;    private String fileSizeHeaderText = null;    private String fileTypeHeaderText = null;    private String fileDateHeaderText = null;    private String fileAttrHeaderText = 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;    }    public void installComponents(JFileChooser fc) {	FileSystemView fsv = fc.getFileSystemView();	fc.setBorder(new EmptyBorder(12, 12, 11, 11));	fc.setLayout(new BorderLayout(0, 11));	// ********************************* //	// **** 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();	directoryComboBox.getAccessibleContext().setAccessibleDescription(lookInLabelText);	directoryComboBox.putClientProperty( "JComboBox.lightweightKeyboardNavigation", "Lightweight" );	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.getAccessibleContext().setAccessibleName(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.getAccessibleContext().setAccessibleName(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	b = new JButton(getNewFolderAction());	b.setText(null);	b.setIcon(newFolderIcon);     	b.setToolTipText(newFolderToolTipText);     	b.getAccessibleContext().setAccessibleName(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();	class ViewButtonListener implements ActionListener {	    JFileChooser fc;	    ViewButtonListener(JFileChooser fc) {		this.fc = fc;	    }	    public void actionPerformed(ActionEvent e) {		JToggleButton b = (JToggleButton)e.getSource();		JPanel oldViewPanel = currentViewPanel;		if (b == detailsViewButton) {		    if (detailsViewPanel == null) {			detailsViewPanel = createDetailsView(fc);			detailsViewPanel.setPreferredSize(LIST_PREF_SIZE);		    }		    currentViewPanel = detailsViewPanel;		} else {		    currentViewPanel = listViewPanel;		}		if (currentViewPanel != oldViewPanel) {		    centerPanel.remove(oldViewPanel);		    centerPanel.add(currentViewPanel, BorderLayout.CENTER);		    centerPanel.revalidate();		    centerPanel.repaint();		}	    }	}	ViewButtonListener viewButtonListener = new ViewButtonListener(fc);	// List Button	listViewButton = new JToggleButton(listViewIcon);     	listViewButton.setToolTipText(listViewButtonToolTipText);     	listViewButton.getAccessibleContext().setAccessibleName(listViewButtonAccessibleName);	listViewButton.setSelected(true);	listViewButton.setAlignmentX(JComponent.LEFT_ALIGNMENT);	listViewButton.setAlignmentY(JComponent.CENTER_ALIGNMENT);	listViewButton.setMargin(shrinkwrap);	listViewButton.addActionListener(viewButtonListener);	topButtonPanel.add(listViewButton);	viewButtonGroup.add(listViewButton);	// Details Button	detailsViewButton = new JToggleButton(detailsViewIcon);     	detailsViewButton.setToolTipText(detailsViewButtonToolTipText);     	detailsViewButton.getAccessibleContext().setAccessibleName(detailsViewButtonAccessibleName);	detailsViewButton.setAlignmentX(JComponent.LEFT_ALIGNMENT);	detailsViewButton.setAlignmentY(JComponent.CENTER_ALIGNMENT);	detailsViewButton.setMargin(shrinkwrap);	detailsViewButton.addActionListener(viewButtonListener);	topButtonPanel.add(detailsViewButton);	viewButtonGroup.add(detailsViewButton);	// Use ShellFolder class to populate combobox only if	// FileSystemView.getRoots() returns one folder and that is	// the same as the first item in the ShellFolder combobox list.	{	    useShellFolder = false;	    File[] roots = fsv.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;		}	    }	}	// ************************************** //	// ******* Add the directory pane ******* //	// ************************************** //	centerPanel = new JPanel(new BorderLayout());	listViewPanel = createList(fc);	listSelectionModel = list.getSelectionModel();	listViewPanel.setPreferredSize(LIST_PREF_SIZE);	centerPanel.add(listViewPanel, BorderLayout.CENTER);	currentViewPanel = listViewPanel;	centerPanel.add(getAccessoryPanel(), BorderLayout.AFTER_LINE_ENDS);	JComponent accessory = fc.getAccessory();	if(accessory != null) {	    getAccessoryPanel().add(accessory);	}	fc.add(centerPanel, 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()) {			listSelectionModel.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.getAccessibleContext().setAccessibleDescription(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);

⌨️ 快捷键说明

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