📄 basicfilechooserui.java
字号:
/** Text box that displays file name */ JTextField entry; /** Current parent path */ String parentPath; // -- end private -- private class ListLabelRenderer extends JLabel implements ListCellRenderer { /** DOCUMENT ME! */ final Color selected = new Color(153, 204, 255); /** * Creates a new ListLabelRenderer object. */ public ListLabelRenderer() { super(); setOpaque(true); } /** * DOCUMENT ME! * * @param list DOCUMENT ME! * @param value DOCUMENT ME! * @param index DOCUMENT ME! * @param isSelected DOCUMENT ME! * @param cellHasFocus DOCUMENT ME! * * @return DOCUMENT ME! */ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { setHorizontalAlignment(SwingConstants.LEFT); File file = (File) value; setText(filechooser.getName(file)); setIcon(filechooser.getIcon(file)); setBackground(isSelected ? selected : Color.WHITE); setForeground(Color.BLACK); return this; } } /** * Closes the dialog. */ void closeDialog() { Window owner = SwingUtilities.windowForComponent(filechooser); if (owner instanceof JDialog) ((JDialog) owner).dispose(); } /** * Creates a new <code>BasicFileChooserUI</code> object. * * @param b the file chooser component. */ public BasicFileChooserUI(JFileChooser b) { this.filechooser = b; } /** * Returns a UI delegate for the given component. * * @param c the component (should be a {@link JFileChooser}). * * @return A new UI delegate. */ public static ComponentUI createUI(JComponent c) { return new BasicFileChooserUI((JFileChooser) c); } /** * Installs the UI for the specified component. * * @param c the component (should be a {@link JFileChooser}). */ public void installUI(JComponent c) { if (c instanceof JFileChooser) { JFileChooser fc = (JFileChooser) c; fc.resetChoosableFileFilters(); createModel(); clearIconCache(); installDefaults(fc); installComponents(fc); installListeners(fc); Object path = filechooser.getCurrentDirectory(); if (path != null) parentPath = path.toString().substring(path.toString().lastIndexOf("/")); } } /** * Uninstalls this UI from the given component. * * @param c the component (should be a {@link JFileChooser}). */ public void uninstallUI(JComponent c) { model = null; uninstallListeners(filechooser); uninstallComponents(filechooser); uninstallDefaults(filechooser); filechooser = null; } // FIXME: Indent the entries in the combobox // Made this method package private to access it from within inner classes // with better performance void boxEntries() { ArrayList parentFiles = new ArrayList(); File parent = filechooser.getCurrentDirectory(); if (parent == null) parent = filechooser.getFileSystemView().getDefaultDirectory(); while (parent != null) { String name = parent.getName(); if (name.equals("")) name = parent.getAbsolutePath(); parentFiles.add(parentFiles.size(), name); parent = parent.getParentFile(); } if (parentFiles.size() == 0) return; if (parents.getItemCount() > 0) parents.removeAllItems(); for (int i = parentFiles.size() - 1; i >= 0; i--) parents.addItem(parentFiles.get(i)); parents.setSelectedIndex(parentFiles.size() - 1); parents.revalidate(); parents.repaint(); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ private ItemListener createBoxListener() { return new ItemListener() { public void itemStateChanged(ItemEvent e) { if (parents.getItemCount() - 1 == parents.getSelectedIndex()) return; StringBuffer dir = new StringBuffer(); for (int i = 0; i <= parents.getSelectedIndex(); i++) { dir.append(parents.getItemAt(i)); dir.append(File.separatorChar); } filechooser.setCurrentDirectory(filechooser.getFileSystemView() .createFileObject(dir .toString())); } }; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ private ItemListener createFilterListener() { return new ItemListener() { public void itemStateChanged(ItemEvent e) { int index = filters.getSelectedIndex(); if (index == -1) return; filechooser.setFileFilter(filechooser.getChoosableFileFilters()[index]); } }; } void filterEntries() { FileFilter[] list = filechooser.getChoosableFileFilters(); if (filters.getItemCount() > 0) filters.removeAllItems(); int index = -1; String selected = filechooser.getFileFilter().getDescription(); for (int i = 0; i < list.length; i++) { if (selected.equals(list[i].getDescription())) index = i; filters.addItem(list[i].getDescription()); } filters.setSelectedIndex(index); filters.revalidate(); filters.repaint(); } /** * Creates and install the subcomponents for the file chooser. * * @param fc the file chooser. */ public void installComponents(JFileChooser fc) { JLabel look = new JLabel("Look In:"); parents = new JComboBox(); parents.setRenderer(new BasicComboBoxRenderer()); boxEntries(); look.setLabelFor(parents); JPanel parentsPanel = new JPanel(); parentsPanel.add(look); parentsPanel.add(parents); JPanel buttonPanel = new JPanel(); upFolderButton = new JButton(); upFolderButton.setIcon(upFolderIcon); buttonPanel.add(upFolderButton); homeFolderButton = new JButton(); homeFolderButton = new JButton(homeFolderIcon); buttonPanel.add(homeFolderButton); newFolderButton = new JButton(); newFolderButton.setIcon(newFolderIcon); buttonPanel.add(newFolderButton); ButtonGroup toggles = new ButtonGroup(); JToggleButton listViewButton = new JToggleButton(); listViewButton.setIcon(listViewIcon); toggles.add(listViewButton); buttonPanel.add(listViewButton); JToggleButton detailsViewButton = new JToggleButton(); detailsViewButton.setIcon(detailsViewIcon); toggles.add(detailsViewButton); buttonPanel.add(detailsViewButton); JPanel topPanel = new JPanel(); parentsPanel.add(buttonPanel); topPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 0)); topPanel.add(parentsPanel); accessoryPanel = new JPanel(); if (filechooser.getAccessory() != null) accessoryPanel.add(filechooser.getAccessory(), BorderLayout.CENTER); filelist = new JList(model); filelist.setVisibleRowCount(6); JScrollPane scrollp = new JScrollPane(filelist); scrollp.setPreferredSize(new Dimension(400, 175)); filelist.setBackground(Color.WHITE); filelist.setLayoutOrientation(JList.VERTICAL_WRAP); filelist.setCellRenderer(new ListLabelRenderer()); GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; c.fill = GridBagConstraints.BOTH; c.weightx = 1; c.weighty = 1; JPanel centrePanel = new JPanel(); centrePanel.setLayout(new GridBagLayout()); centrePanel.add(scrollp, c); c.gridx = 1; centrePanel.add(accessoryPanel, c); JLabel fileNameLabel = new JLabel("File Name:"); JLabel fileTypesLabel = new JLabel("Files of Type:"); entry = new JTextField(); filters = new JComboBox(); filterEntries(); fileNameLabel.setLabelFor(entry); fileNameLabel.setHorizontalTextPosition(SwingConstants.LEFT); fileTypesLabel.setLabelFor(filters); fileTypesLabel.setHorizontalTextPosition(SwingConstants.LEFT); closePanel = new JPanel(); accept = getApproveButton(filechooser); cancel = new JButton(cancelButtonText); cancel.setMnemonic(cancelButtonMnemonic); cancel.setToolTipText(cancelButtonToolTipText); closePanel.add(accept); closePanel.add(cancel); c.anchor = GridBagConstraints.WEST; c.weighty = 0; c.weightx = 0; c.gridx = 0; bottomPanel = new JPanel(); bottomPanel.setLayout(new GridBagLayout()); bottomPanel.add(fileNameLabel, c); c.gridy = 1; bottomPanel.add(fileTypesLabel, c); c.gridx = 1; c.gridy = 0; c.weightx = 1; c.weighty = 1; bottomPanel.add(entry, c); c.gridy = 1; bottomPanel.add(filters, c); c.fill = GridBagConstraints.NONE; c.gridy = 2; c.anchor = GridBagConstraints.EAST; bottomPanel.add(closePanel, c); filechooser.setLayout(new BorderLayout()); filechooser.add(topPanel, BorderLayout.NORTH); filechooser.add(centrePanel, BorderLayout.CENTER); filechooser.add(bottomPanel, BorderLayout.SOUTH); } /** * Uninstalls the components from the file chooser. * * @param fc the file chooser. */ public void uninstallComponents(JFileChooser fc) { parents = null; accept = null; cancel = null; upFolderButton = null; homeFolderButton = null; newFolderButton = null; filelist = null; } /** * Installs the listeners required by this UI delegate. * * @param fc the file chooser. */ protected void installListeners(JFileChooser fc) { propertyChangeListener = createPropertyChangeListener(filechooser); filechooser.addPropertyChangeListener(propertyChangeListener); //parents.addItemListener(createBoxListener()); accept.addActionListener(getApproveSelectionAction()); cancel.addActionListener(getCancelSelectionAction()); upFolderButton.addActionListener(getChangeToParentDirectoryAction()); homeFolderButton.addActionListener(getGoHomeAction()); newFolderButton.addActionListener(getNewFolderAction()); filters.addItemListener(createFilterListener()); filelist.addMouseListener(createDoubleClickListener(filechooser, filelist)); filelist.addListSelectionListener(createListSelectionListener(filechooser)); } /** * Uninstalls the listeners previously installed by this UI delegate. * * @param fc the file chooser. */ protected void uninstallListeners(JFileChooser fc) { filechooser.removePropertyChangeListener(propertyChangeListener); propertyChangeListener = null; } /** * Installs the defaults for this UI delegate. * * @param fc the file chooser. */ protected void installDefaults(JFileChooser fc) { installIcons(fc); installStrings(fc); } /** * Uninstalls the defaults previously added by this UI delegate. * * @param fc the file chooser. */ protected void uninstallDefaults(JFileChooser fc) { uninstallStrings(fc); uninstallIcons(fc); } /** * Installs the icons for this UI delegate (NOT YET IMPLEMENTED). * * @param fc the file chooser. */ protected void installIcons(JFileChooser fc) { // FIXME: Implement. } /** * Uninstalls the icons previously added by this UI delegate (NOT YET * IMPLEMENTED). * * @param fc the file chooser. */ protected void uninstallIcons(JFileChooser fc) { // FIXME: Implement. } /** * Installs the strings used by this UI delegate. * * @param fc the file chooser. */ protected void installStrings(JFileChooser fc) { acceptAllFileFilterText = UIManager.getString("FileChooser.acceptAllFileFilterText"); cancelButtonMnemonic = UIManager.getInt("FileChooser.cancelButtonMnemonic"); cancelButtonText = UIManager.getString("FileChooser.cancelButtonText"); cancelButtonToolTipText = UIManager.getString("FileChooser.cancelButtonToolTipText"); dirDescText = UIManager.getString("FileChooser.directoryDescriptionText"); fileDescText = UIManager.getString("FileChooser.fileDescriptionText"); helpButtonMnemonic = UIManager.getInt("FileChooser.helpButtonMnemonic"); helpButtonText = UIManager.getString("FileChooser.helpButtonText"); helpButtonToolTipText = UIManager.getString("FileChooser.helpButtonToolTipText"); openButtonMnemonic = UIManager.getInt("FileChooser.openButtonMnemonic"); openButtonText = UIManager.getString("FileChooser.openButtonText"); openButtonToolTipText = UIManager.getString("FileChooser.openButtonToolTipText"); saveButtonMnemonic = UIManager.getInt("FileChooser.saveButtonMnemonic"); saveButtonText = UIManager.getString("FileChooser.saveButtonText"); saveButtonToolTipText = UIManager.getString("FileChooser.saveButtonToolTipText"); } /** * Uninstalls the strings previously added by this UI delegate. * * @param fc the file chooser. */ protected void uninstallStrings(JFileChooser fc) { acceptAllFileFilterText = null; cancelButtonMnemonic = 0; cancelButtonText = null; cancelButtonToolTipText = null; dirDescText = null; fileDescText = null; helpButtonMnemonic = 0; helpButtonText = null; helpButtonToolTipText = null; openButtonMnemonic = 0; openButtonText = null; openButtonToolTipText = null; saveButtonMnemonic = 0; saveButtonText = null; saveButtonToolTipText = null; } /** * Creates a new directory model. */ protected void createModel() { model = new BasicDirectoryModel(filechooser); } /**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -