gtkfilechooserui.java

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

JAVA
882
字号
/* * @(#)GTKFileChooserUI.java	1.10 03/05/05 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.java.swing.plaf.gtk;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.swing.*;import javax.swing.border.*;import javax.swing.filechooser.*;import javax.swing.event.*;import javax.swing.plaf.*;import javax.swing.table.*;/** * GTK FileChooserUI. * * @version 1.36 08/21/02 * @author Leif Samuelsson * @author Jeff Dinkins */class GTKFileChooserUI extends SynthFileChooserUI {    // The accessoryPanel is a container to place the JFileChooser accessory component    private JPanel accessoryPanel = null;    private String newFolderButtonText = null;    private String deleteFileButtonText = null;    private String renameFileButtonText = null;    private String newFolderButtonToolTipText = null;    private String deleteFileButtonToolTipText = null;    private String renameFileButtonToolTipText = null;    private int newFolderButtonMnemonic = 0;    private int deleteFileButtonMnemonic = 0;    private int renameFileButtonMnemonic = 0;    // From Motif    private JPanel rightPanel;    private JList directoryList;    private JList fileList;    private JLabel pathField;    private JTextField fileNameTextField;    private static final Dimension hstrut10 = new Dimension(10, 1);    private static final Dimension vstrut10 = new Dimension(1, 10);    private static final Insets insets = new Insets(10, 10, 10, 10);    private static Dimension prefListSize = new Dimension(75, 150);    private static Dimension PREF_SIZE = new Dimension(435, 360);    private static Dimension MIN_SIZE = new Dimension(200, 300);    private static Dimension PREF_ACC_SIZE = new Dimension(10, 10);    private static Dimension ZERO_ACC_SIZE = new Dimension(1, 1);    private static Dimension MAX_SIZE = new Dimension(Short.MAX_VALUE, Short.MAX_VALUE);    private static final Insets buttonMargin = new Insets(3, 3, 3, 3);    private String filesLabelText = null;    private String foldersLabelText = null;    private String pathLabelText = null;    private int pathLabelMnemonic = 0;    private JComboBox directoryComboBox;    private DirectoryComboBoxModel directoryComboBoxModel;    private Action directoryComboBoxAction = new DirectoryComboBoxAction();    private JPanel bottomButtonPanel;    public String getFileName() {	if (fileNameTextField != null) {	    return fileNameTextField.getText();	} else {	    return null;	}    }    public void setFileName(String fileName) {	if (fileNameTextField != null) {	    fileNameTextField.setText(fileName);	}    }//     public String getDirectoryName() {// 	return pathField.getText();//     }    public void setDirectoryName(String dirname) {	pathField.setText(dirname);    }    public void ensureFileIsVisible(JFileChooser fc, File f) {	// PENDING    }    public void rescanCurrentDirectory(JFileChooser fc) {	// PENDING    }    protected JPanel getAccessoryPanel() {	return accessoryPanel;    }    private void updateDefaultButton() {	JFileChooser filechooser = getFileChooser();	JRootPane root = SwingUtilities.getRootPane(filechooser);	if (root == null) {	    return;	}	if (filechooser.getControlButtonsAreShown()) {	    if (root.getDefaultButton() == null) {		root.setDefaultButton(getApproveButton(filechooser));		getCancelButton(filechooser).setDefaultCapable(false);	    }	} else {	    if (root.getDefaultButton() == getApproveButton(filechooser)) {		root.setDefaultButton(null);	    }	}    }    protected void doSelectedFileChanged(PropertyChangeEvent e) {	super.doSelectedFileChanged(e);	File f = (File) e.getNewValue();	if (f != null) {	    setFileName(getFileChooser().getName(f));	}    }    protected void doDirectoryChanged(PropertyChangeEvent e) {	directoryList.clearSelection();	fileList.clearSelection();	File currentDirectory = getFileChooser().getCurrentDirectory();	if (currentDirectory != null) {	    try {		setDirectoryName(((File)e.getNewValue()).getCanonicalPath());	    } catch (IOException ioe) {		setDirectoryName(((File)e.getNewValue()).getAbsolutePath());	    }	    directoryComboBoxModel.addItem(currentDirectory);	}	super.doDirectoryChanged(e);    }    protected 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);		getAccessoryPanel().setPreferredSize(accessory.getPreferredSize());		getAccessoryPanel().setMaximumSize(MAX_SIZE);	    } else {		getAccessoryPanel().setPreferredSize(ZERO_ACC_SIZE);		getAccessoryPanel().setMaximumSize(ZERO_ACC_SIZE);	    }	}    }    protected void doFileSelectionModeChanged(PropertyChangeEvent e) {	directoryList.clearSelection();	rightPanel.setVisible(((Integer)e.getNewValue()).intValue() != JFileChooser.DIRECTORIES_ONLY);	super.doFileSelectionModeChanged(e);    }    protected void doMultiSelectionChanged(PropertyChangeEvent e) {	if (getFileChooser().isMultiSelectionEnabled()) {	    fileList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);	} else {	    fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);	    fileList.clearSelection();	}	super.doMultiSelectionChanged(e);    }    protected void doControlButtonsChanged(PropertyChangeEvent e) {	super.doControlButtonsChanged(e);	JFileChooser filechooser = getFileChooser();	if (filechooser.getControlButtonsAreShown()) {	    filechooser.add(bottomButtonPanel, BorderLayout.SOUTH);	} else {	    filechooser.remove(bottomButtonPanel);	}	updateDefaultButton();    }    protected void doAncestorChanged(PropertyChangeEvent e) {	if (e.getOldValue() == null && e.getNewValue() != null) {	    // Ancestor was added, set initial focus	    fileNameTextField.selectAll();	    fileNameTextField.requestFocus();	    updateDefaultButton();	}	super.doAncestorChanged(e);    }    // ********************************************    // ************ Create Listeners **************    // ********************************************    public ListSelectionListener createListSelectionListener(JFileChooser fc) {	return new SelectionListener();    }    class DoubleClickListener extends MouseAdapter {	JList list;	public  DoubleClickListener(JList list) {	    this.list = list;	}	public void mouseClicked(MouseEvent e) {	    if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {		int index = list.locationToIndex(e.getPoint());		if (index >= 0) {		    File f = (File) list.getModel().getElementAt(index);		    try {			// Strip trailing ".."			f = f.getCanonicalFile();		    } catch (IOException ex) {			// That's ok, we'll use f as is		    }		    if (getFileChooser().isTraversable(f)) {			list.clearSelection();			getFileChooser().setCurrentDirectory(f);		    } else {			getFileChooser().approveSelection();		    }		}	    }	}    }    protected MouseListener createDoubleClickListener(JFileChooser fc, JList list) {	return new DoubleClickListener(list);    }    protected class SelectionListener implements ListSelectionListener {	public void valueChanged(ListSelectionEvent e) {	    if (!e.getValueIsAdjusting()) {		JFileChooser chooser = getFileChooser();		JList list = (JList) e.getSource();		if (chooser.isMultiSelectionEnabled()) {		    File[] files = null;		    Object[] objects = list.getSelectedValues();		    if (objects != null) {			if (objects.length == 1			    && ((File)objects[0]).isDirectory()			    && chooser.isTraversable(((File)objects[0]))			    && (chooser.getFileSelectionMode() != chooser.DIRECTORIES_ONLY				|| !chooser.getFileSystemView().isFileSystem(((File)objects[0])))) {			    setDirectorySelected(true);			    setDirectory(((File)objects[0]));			} else {			    ArrayList fList = new ArrayList(objects.length);			    for (int i = 0; i < objects.length; i++) {				File f = (File)objects[i];				if ((chooser.isFileSelectionEnabled() && f.isFile())				    || (chooser.isDirectorySelectionEnabled() && f.isDirectory())) {				    fList.add(f);				}			    }			    if (fList.size() > 0) {				files = (File[])fList.toArray(new File[fList.size()]);			    }			    setDirectorySelected(false);			}		    }		    chooser.setSelectedFiles(files);		} else {		    File file = (File)list.getSelectedValue();		    if (file != null			&& file.isDirectory()			&& chooser.isTraversable(file)			&& (chooser.getFileSelectionMode() != chooser.DIRECTORIES_ONLY			    || !chooser.getFileSystemView().isFileSystem(file))) {			setDirectorySelected(true);			setDirectory(file);		    } else {			setDirectorySelected(false);			if (file != null) {			    chooser.setSelectedFile(file);			}		    }		}	    }	}    }    //    // ComponentUI Interface Implementation methods    //    public static ComponentUI createUI(JComponent c) {        return new GTKFileChooserUI();    }    public void installUI(JComponent c) {	accessoryPanel = new JPanel(new BorderLayout(10, 10));	accessoryPanel.setName("GTKFileChooser.accessoryPanel");	super.installUI(c);    }    public void uninstallUI(JComponent c) {	super.uninstallUI(c);	if (accessoryPanel != null) {	    accessoryPanel.removeAll();	}	accessoryPanel = null;	getFileChooser().removeAll();    }    public void installComponents(JFileChooser fc) {	super.installComponents(fc);	boolean leftToRight = fc.getComponentOrientation().isLeftToRight();	fc.setLayout(new BorderLayout());	fc.setAlignmentX(JComponent.CENTER_ALIGNMENT);	// Top row of buttons	JPanel topButtonPanel = new JPanel(new FlowLayout(FlowLayout.LEADING, 0, 0));        topButtonPanel.setBorder(new EmptyBorder(10, 10, 0, 10));	topButtonPanel.setName("GTKFileChooser.topButtonPanel");	JButton newFolderButton = new JButton(getNewFolderAction());	newFolderButton.setName("GTKFileChooser.newFolderButton");	newFolderButton.setMnemonic(newFolderButtonMnemonic);	newFolderButton.setToolTipText(newFolderButtonToolTipText);	newFolderButton.setText(newFolderButtonText);	topButtonPanel.add(newFolderButton);	JButton deleteFileButton = new JButton(deleteFileButtonText);	deleteFileButton.setName("GTKFileChooser.deleteFileButton");	deleteFileButton.setMnemonic(deleteFileButtonMnemonic);	deleteFileButton.setToolTipText(deleteFileButtonToolTipText);	deleteFileButton.setEnabled(false);	topButtonPanel.add(deleteFileButton);	JButton renameFileButton = new JButton(renameFileButtonText);	renameFileButton.setName("GTKFileChooser.renameFileButton");	renameFileButton.setMnemonic(renameFileButtonMnemonic);	renameFileButton.setToolTipText(renameFileButtonToolTipText);	topButtonPanel.add(renameFileButton);	fc.add(topButtonPanel, BorderLayout.NORTH);	JPanel interior = new JPanel();        interior.setBorder(new EmptyBorder(0, 10, 10, 10));	interior.setName("GTKFileChooser.interiorPanel");	align(interior);	interior.setLayout(new BoxLayout(interior, BoxLayout.PAGE_AXIS));	fc.add(interior, BorderLayout.CENTER);	JPanel comboBoxPanel = new JPanel(new FlowLayout(FlowLayout.CENTER,                                                         0, 0) {            public void layoutContainer(Container target) {                super.layoutContainer(target);                JComboBox comboBox = directoryComboBox;                if (comboBox.getWidth() > target.getWidth()) {                    comboBox.setBounds(0, comboBox.getY(), target.getWidth(),                                       comboBox.getHeight());                }            }        });        comboBoxPanel.setBorder(new EmptyBorder(0, 0, 4, 0));	comboBoxPanel.setName("GTKFileChooser.directoryComboBoxPanel");	// CurrentDir ComboBox	directoryComboBoxModel = createDirectoryComboBoxModel(fc);	directoryComboBox = new JComboBox(directoryComboBoxModel);	directoryComboBox.setName("GTKFileChooser.directoryComboBox");	directoryComboBox.putClientProperty( "JComboBox.lightweightKeyboardNavigation", "Lightweight" );	directoryComboBox.addActionListener(directoryComboBoxAction);	directoryComboBox.setRenderer(createDirectoryComboBoxRenderer(fc));	directoryComboBox.setMaximumRowCount(8);        comboBoxPanel.add(directoryComboBox);	interior.add(comboBoxPanel);	// interior.add(Box.createRigidArea(vstrut10));	// CENTER: left, right, accessory	JPanel centerPanel = new JPanel(new BorderLayout());	centerPanel.setName("GTKFileChooser.centerPanel");	// SPLIT PANEL: left, right	JSplitPane splitPanel = new JSplitPane();	splitPanel.setName("GTKFileChooser.splitPanel");	splitPanel.setDividerLocation((PREF_SIZE.width-8)/2);	// left panel - Filter & directoryList	JPanel leftPanel = new JPanel(new GridBagLayout());	leftPanel.setName("GTKFileChooser.directoryListPanel");	// Add the Directory List	// Create a label that looks like button (should be a table header)	TableCellRenderer headerRenderer = new JTableHeader().getDefaultRenderer();	JComponent directoryListLabel =	    (JComponent)headerRenderer.getTableCellRendererComponent(null, foldersLabelText,								     false, false, 0, 0);	directoryListLabel.setName("GTKFileChooser.directoryListLabel");	leftPanel.add(directoryListLabel, new GridBagConstraints(                          0, 0, 1, 1, 1, 0, GridBagConstraints.WEST,                          GridBagConstraints.HORIZONTAL,

⌨️ 快捷键说明

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