gtkfilechooserui.java

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

JAVA
1,363
字号
    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 = ShellFolder.getNormalizedFile(f);		    } catch (IOException ex) {			// That's ok, we'll use f as is		    }		    if (getFileChooser().isTraversable(f)) {                        list.clearSelection();                        if (getFileChooser().getCurrentDirectory().equals(f)){                            rescanCurrentDirectory(getFileChooser());                        } else {                            getFileChooser().setCurrentDirectory(f);                        }		    } else {			getFileChooser().approveSelection();		    }		}	    }	}        public void mouseEntered(MouseEvent evt) {            if (list != null) {                TransferHandler th1 = getFileChooser().getTransferHandler();                TransferHandler th2 = list.getTransferHandler();                if (th1 != th2) {                    list.setTransferHandler(th1);                }                if (getFileChooser().getDragEnabled() != list.getDragEnabled()) {                    list.setDragEnabled(getFileChooser().getDragEnabled());                }            }        }    }    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.FILES_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((JFileChooser)c);    }    public void installUI(JComponent c) {	accessoryPanel = new JPanel(new BorderLayout(10, 10));	accessoryPanel.setName("GTKFileChooser.accessoryPanel");	super.installUI(c);    }    public void uninstallUI(JComponent c) {        c.removePropertyChangeListener(filterComboBoxModel);        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");	if (!UIManager.getBoolean("FileChooser.readOnly")) {	    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);        RenameFileAction rfa = new RenameFileAction();        JButton renameFileButton = new JButton(rfa);        if (readOnly) {            rfa.setEnabled(false);        }        renameFileButton.setText(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.setMaximumRowCount(8);	comboBoxPanel.add(directoryComboBox);	interior.add(comboBoxPanel);	// 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();	JLabel directoryListLabel =	    (JLabel)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,                          new Insets(0, 0, 0, 0), 0, 0));	leftPanel.add(createDirectoryList(), new GridBagConstraints(                          0, 1, 1, 1, 1, 1, GridBagConstraints.EAST,                          GridBagConstraints.BOTH,                          new Insets(0, 0, 0, 0), 0, 0));        directoryListLabel.setDisplayedMnemonic(foldersLabelMnemonic);        directoryListLabel.setLabelFor(directoryList);	// create files list	rightPanel = new JPanel(new GridBagLayout());	rightPanel.setName("GTKFileChooser.fileListPanel");	headerRenderer = new JTableHeader().getDefaultRenderer();	JLabel fileListLabel = 	    (JLabel)headerRenderer.getTableCellRendererComponent(null, filesLabelText,								     false, false, 0, 0);	fileListLabel.setName("GTKFileChooser.fileListLabel");        	rightPanel.add(fileListLabel, new GridBagConstraints(                          0, 0, 1, 1, 1, 0, GridBagConstraints.WEST,                          GridBagConstraints.HORIZONTAL,                          new Insets(0, 0, 0, 0), 0, 0));	rightPanel.add(createFilesList(), new GridBagConstraints(                          0, 1, 1, 1, 1, 1, GridBagConstraints.EAST,                          GridBagConstraints.BOTH,                          new Insets(0, 0, 0, 0), 0, 0));        fileListLabel.setDisplayedMnemonic(filesLabelMnemonic);        fileListLabel.setLabelFor(fileList);	splitPanel.add(leftPanel,  leftToRight ? JSplitPane.LEFT : JSplitPane.RIGHT);	splitPanel.add(rightPanel, leftToRight ? JSplitPane.RIGHT : JSplitPane.LEFT);	centerPanel.add(splitPanel, BorderLayout.CENTER);	JComponent accessoryPanel = getAccessoryPanel();	JComponent accessory = fc.getAccessory();	if (accessoryPanel != null) {	    if (accessory == null) {		accessoryPanel.setPreferredSize(ZERO_ACC_SIZE);		accessoryPanel.setMaximumSize(ZERO_ACC_SIZE);	    } else {		getAccessoryPanel().add(accessory, BorderLayout.CENTER);		accessoryPanel.setPreferredSize(accessory.getPreferredSize());		accessoryPanel.setMaximumSize(MAX_SIZE);	    }	    align(accessoryPanel);	    centerPanel.add(accessoryPanel, BorderLayout.AFTER_LINE_ENDS);	}	interior.add(centerPanel);	interior.add(Box.createRigidArea(vstrut10));	JPanel pathFieldPanel = new JPanel(new FlowLayout(FlowLayout.LEADING,                                                          0, 0));        pathFieldPanel.setBorder(new EmptyBorder(0, 0, 4, 0));	JLabel pathFieldLabel = new JLabel(pathLabelText);	pathFieldLabel.setName("GTKFileChooser.pathFieldLabel");	pathFieldLabel.setDisplayedMnemonic(pathLabelMnemonic);	align(pathFieldLabel);	pathFieldPanel.add(pathFieldLabel);        pathFieldPanel.add(Box.createRigidArea(hstrut3));	File currentDirectory = fc.getCurrentDirectory();	String curDirName = null;	if (currentDirectory != null) {	    curDirName = currentDirectory.getPath();	}	pathField = new JLabel(curDirName) {	    public Dimension getMaximumSize() {		Dimension d = super.getMaximumSize();		d.height = getPreferredSize().height;		return d;	    }	};	pathField.setName("GTKFileChooser.pathField");	align(pathField);	pathFieldPanel.add(pathField);	interior.add(pathFieldPanel);	// add the fileName field	fileNameTextField = new JTextField() {	    public Dimension getMaximumSize() {		Dimension d = super.getMaximumSize();		d.height = getPreferredSize().height;		return d;	    }	};                pathFieldLabel.setLabelFor(fileNameTextField);                Set forwardTraversalKeys = fileNameTextField.getFocusTraversalKeys(            KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);        forwardTraversalKeys = new HashSet(forwardTraversalKeys);        forwardTraversalKeys.remove(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));        fileNameTextField.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardTraversalKeys);	fileNameTextField.setName("GTKFileChooser.fileNameTextField");	fileNameTextField.getActionMap().put("fileNameCompletionAction", getFileNameCompletionAction());        fileNameTextField.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0), "fileNameCompletionAction");	interior.add(fileNameTextField);        // Add the filter combo box        JPanel panel = new JPanel();        panel.setLayout(new FlowLayout(FlowLayout.LEADING, 0, 0));        panel.setBorder(new EmptyBorder(0, 0, 4, 0));        JLabel filterLabel = new JLabel(filterLabelText);        filterLabel.setName("GTKFileChooser.filterLabel");        filterLabel.setDisplayedMnemonic(filterLabelMnemonic);        panel.add(filterLabel);        filterComboBoxModel = createFilterComboBoxModel();

⌨️ 快捷键说明

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