gtkfilechooserui.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 1,342 行 · 第 1/4 页

JAVA
1,342
字号
	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();                        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.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((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);        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();        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,                          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));        // create files list        rightPanel = new JPanel(new GridBagLayout());        rightPanel.setName("GTKFileChooser.fileListPanel");        headerRenderer = new JTableHeader().getDefaultRenderer();        JComponent fileListLabel =            (JComponent)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));        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");        pathFieldLabel.setLabelFor(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;            }        };        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();        fc.addPropertyChangeListener(filterComboBoxModel);        filterComboBox = new JComboBox(filterComboBoxModel);

⌨️ 快捷键说明

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