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 + -
显示快捷键?