< prev index next >
src/java.desktop/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java
Print this page
@@ -20,90 +20,111 @@
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package com.sun.java.swing.plaf.windows;
+import static com.sun.java.swing.plaf.windows.WindowsFileChooserUI.WindowsFileListUI.HOVER_CELL_PROPERTY;
+import static com.sun.java.swing.plaf.windows.WindowsFileChooserUI.WindowsFileListUI.ITEM_SELECTED_BORDER_COLOR;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.filechooser.*;
import javax.swing.event.*;
import javax.swing.plaf.*;
import javax.swing.plaf.basic.*;
import java.awt.*;
+import static java.awt.Color.WHITE;
import java.awt.event.*;
+import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.beans.*;
import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
+import static java.lang.Boolean.TRUE;
import java.util.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import sun.awt.shell.ShellFolder;
import sun.swing.*;
import javax.accessibility.*;
+import static javax.swing.Action.NAME;
+import static javax.swing.DefaultButtonModel.ARMED;
+import static javax.swing.DefaultButtonModel.PRESSED;
+import static javax.swing.SwingConstants.RIGHT;
+import sun.awt.OSInfo;
+import sun.awt.Win32GraphicsEnvironment;
+import sun.swing.FilePane.ViewType;
/**
- * Windows {@literal L&F} implementation of a FileChooser.
+ * Windows L&F implementation of a FileChooser.
*
* @author Jeff Dinkins
*/
public class WindowsFileChooserUI extends BasicFileChooserUI {
- // The following are private because the implementation of the
- // Windows FileChooser L&F is not complete yet.
-
- private JPanel centerPanel;
-
- private JLabel lookInLabel;
- private JComboBox<File> directoryComboBox;
- private DirectoryComboBoxModel directoryComboBoxModel;
- private ActionListener directoryComboBoxAction = new DirectoryComboBoxAction();
+ private WindowsAddressBar addressBar;
private FilterComboBoxModel filterComboBoxModel;
private JTextField filenameTextField;
private FilePane filePane;
- private WindowsPlacesBar placesBar;
+ private WindowsNavigationTree navTree;
private JButton approveButton;
private JButton cancelButton;
- private JPanel buttonPanel;
+ private JToolBar bottomToolbar;
private JPanel bottomPanel;
+ private final JPanel centerSplitPaneContainer = new JPanel(new BorderLayout());
+ private final JSplitPane centerSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true) {{
+ setUI(new BasicSplitPaneUI(){
+ @Override
+ public BasicSplitPaneDivider createDefaultDivider() {
+ return new BasicSplitPaneDivider(this){
+
+ @Override
+ public void paint(Graphics g) {
+ Color color = new Color(214, 229, 245);
+ if(OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_7)>0)
+ color = SystemColor.control;
+
+ g.setColor(WHITE);
+ g.fillRect(0, 0, getWidth(), getHeight());
+
+ g.setColor(color);
+ int lineX = Math.max(getWidth() / 2, 0);
+ g.drawLine(lineX, 0, lineX, getHeight());
+ }
+ };
+ }
+
+ });
+ }};
+
private JComboBox<FileFilter> filterComboBox;
private static final Dimension hstrut10 = new Dimension(10, 1);
private static final Dimension vstrut4 = new Dimension(1, 4);
private static final Dimension vstrut6 = new Dimension(1, 6);
private static final Dimension vstrut8 = new Dimension(1, 8);
- private static final Insets shrinkwrap = new Insets(0,0,0,0);
+ private static final Insets shrinkwrap = new Insets(0, 0, 0, 0);
// Preferred and Minimum sizes for the dialog box
private static int PREF_WIDTH = 425;
private static int PREF_HEIGHT = 245;
private static Dimension PREF_SIZE = new Dimension(PREF_WIDTH, PREF_HEIGHT);
private static int MIN_WIDTH = 425;
private static int MIN_HEIGHT = 245;
- private static int LIST_PREF_WIDTH = 444;
- private static int LIST_PREF_HEIGHT = 138;
+ // Windows 10 values
+ private static int LIST_PREF_WIDTH = 638;
+ private static int LIST_PREF_HEIGHT = 590;
private static Dimension LIST_PREF_SIZE = new Dimension(LIST_PREF_WIDTH, LIST_PREF_HEIGHT);
- // Labels, mnemonics, and tooltips (oh my!)
- private int lookInLabelMnemonic = 0;
- private String lookInLabelText = null;
- private String saveInLabelText = null;
+ private static final Insets UTILITY_TOOLBAR_BUTTON_MARGIN = new Insets(7, 11, 7, 11);
private int fileNameLabelMnemonic = 0;
private String fileNameLabelText = null;
private int folderNameLabelMnemonic = 0;
private String folderNameLabelText = null;
@@ -118,11 +139,11 @@
private String newFolderAccessibleName = null;
private String viewMenuButtonToolTipText = null;
private String viewMenuButtonAccessibleName = null;
- private BasicFileView fileView = new WindowsFileView();
+ private BasicFileChooserUI.BasicFileView fileView = new WindowsFileView();
private JLabel fileNameLabel;
private void populateFileNameLabel() {
if (getFileChooser().getFileSelectionMode() == JFileChooser.DIRECTORIES_ONLY) {
@@ -150,12 +171,55 @@
}
public void uninstallComponents(JFileChooser fc) {
fc.removeAll();
}
+ private Deque<File> historyBack = new LinkedList<>();
+ private Deque<File> historyForward = new LinkedList<>();
+ private boolean isInBack;
+ private final Action backAction = new AbstractAction() {
+ {
+ putValue(NAME, "Back");
+ setEnabled(false);
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ File dir = historyBack.pop();
+ historyForward.push(getFileChooser().getCurrentDirectory());
+
+ isInBack = true;
+ getFileChooser().setCurrentDirectory(dir);
+ isInBack = false;
+ }
+ };
+ private final Action forwardAction = new AbstractAction() {
+
+ {
+ putValue(NAME, "Forward");
+ setEnabled(false);
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ assert isEnabled();
+
+ File dir = historyForward.peek();
+ getFileChooser().setCurrentDirectory(dir);
+ }
+ };
+
+ private Action getBackAction() {
+ return backAction;
+ }
+
+ private Action getForwardAction() {
+ return forwardAction;
+ }
private class WindowsFileChooserUIAccessor implements FilePane.FileChooserUIAccessor {
+
public JFileChooser getFileChooser() {
return WindowsFileChooserUI.this.getFileChooser();
}
public BasicDirectoryModel getModel() {
@@ -188,11 +252,11 @@
public Action getNewFolderAction() {
return WindowsFileChooserUI.this.getNewFolderAction();
}
- public MouseListener createDoubleClickListener(JList<?> list) {
+ public MouseListener createDoubleClickListener(JList list) {
return WindowsFileChooserUI.this.createDoubleClickListener(getFileChooser(),
list);
}
public ListSelectionListener createListSelectionListener() {
@@ -202,381 +266,539 @@
public void installComponents(JFileChooser fc) {
filePane = new FilePane(new WindowsFileChooserUIAccessor());
fc.addPropertyChangeListener(filePane);
- FileSystemView fsv = fc.getFileSystemView();
+ fc.setLayout(new BorderLayout());
- fc.setBorder(new EmptyBorder(4, 10, 10, 10));
- fc.setLayout(new BorderLayout(8, 8));
+ centerSplitPane.setBorder(null);
- updateUseShellFolder();
+ centerSplitPaneContainer.add(centerSplitPane, BorderLayout.CENTER);
+ fc.add(centerSplitPaneContainer, BorderLayout.CENTER);
+
+ if (!UIManager.getBoolean("FileChooser.noPlacesBar")) {
+ navTree = new WindowsNavigationTree(this);
+ navTreeScrollPane = new JScrollPane(navTree);
+ navTreeScrollPane.setBorder(null);
+ centerSplitPane.add(navTreeScrollPane, JSplitPane.LEFT);
+ fc.addPropertyChangeListener(navTree);
+ }
// ********************************* //
// **** Construct the top panel **** //
// ********************************* //
- // Directory manipulation buttons
- JToolBar topPanel = new JToolBar();
- topPanel.setFloatable(false);
- topPanel.putClientProperty("JToolBar.isRollover", Boolean.TRUE);
-
// Add the top panel to the fileChooser
- fc.add(topPanel, BorderLayout.NORTH);
+ fc.add(createTopContainer(fc), BorderLayout.NORTH);
- // ComboBox Label
- @SuppressWarnings("serial") // anonymous class
- JLabel tmp1 = new JLabel(lookInLabelText, JLabel.TRAILING) {
- public Dimension getPreferredSize() {
- return getMinimumSize();
- }
-
- public Dimension getMinimumSize() {
- Dimension d = super.getPreferredSize();
- if (placesBar != null) {
- d.width = Math.max(d.width, placesBar.getWidth());
- }
- return d;
+ // ************************************** //
+ // ******* Add the directory pane ******* //
+ // ************************************** //
+ JComponent accessory = fc.getAccessory();
+ if (accessory != null) {
+ getAccessoryPanel().add(accessory);
}
- };
- lookInLabel = tmp1;
- lookInLabel.setDisplayedMnemonic(lookInLabelMnemonic);
- lookInLabel.setAlignmentX(JComponent.LEFT_ALIGNMENT);
- lookInLabel.setAlignmentY(JComponent.CENTER_ALIGNMENT);
- topPanel.add(lookInLabel);
- topPanel.add(Box.createRigidArea(new Dimension(8,0)));
-
- // CurrentDir ComboBox
- @SuppressWarnings("serial") // anonymous class
- JComboBox<File> tmp2 = new JComboBox<File>() {
- public Dimension getMinimumSize() {
- Dimension d = super.getMinimumSize();
- d.width = 60;
- return d;
- }
-
- public Dimension getPreferredSize() {
- Dimension d = super.getPreferredSize();
- // Must be small enough to not affect total width.
- d.width = 150;
- return d;
+ filePane.setPreferredSize(LIST_PREF_SIZE);
+ centerSplitPane.add(filePane, JSplitPane.RIGHT);
+ // Add the bottom panel to file chooser
+ fc.add(getBottomPanel(), BorderLayout.SOUTH);
+ setupBottomPanel(fc);
}
- };
- directoryComboBox = tmp2;
- directoryComboBox.putClientProperty( "JComboBox.lightweightKeyboardNavigation", "Lightweight" );
- lookInLabel.setLabelFor(directoryComboBox);
- directoryComboBoxModel = createDirectoryComboBoxModel(fc);
- directoryComboBox.setModel(directoryComboBoxModel);
- directoryComboBox.addActionListener(directoryComboBoxAction);
- directoryComboBox.setRenderer(createDirectoryComboBoxRenderer(fc));
- directoryComboBox.setAlignmentX(JComponent.LEFT_ALIGNMENT);
- directoryComboBox.setAlignmentY(JComponent.CENTER_ALIGNMENT);
- directoryComboBox.setMaximumRowCount(8);
- topPanel.add(directoryComboBox);
- topPanel.add(Box.createRigidArea(hstrut10));
+ private void setupBottomPanel(JFileChooser fc) {
+ getBottomPanel().setLayout(new BorderLayout());
+ getBottomPanel().setBorder(new EmptyBorder(5, 5, 5, 5));
+ getBottomPanel().setFont(Font.decode("Segoe UI-PLAIN-12.5"));
- // Up Button
- JButton upFolderButton = createToolButton(getChangeToParentDirectoryAction(), upFolderIcon,
- upFolderToolTipText, upFolderAccessibleName);
- topPanel.add(upFolderButton);
+ // labels
+ JPanel labelPanel = new JPanel();
+ labelPanel.setOpaque(false);
+ labelPanel.setLayout(new GridBagLayout());
- // New Directory Button
- if (!UIManager.getBoolean("FileChooser.readOnly")) {
- JButton newFolderButton = createToolButton(filePane.getNewFolderAction(), newFolderIcon,
- newFolderToolTipText, newFolderAccessibleName);
- topPanel.add(newFolderButton);
- }
+ GridBagConstraints cons = new GridBagConstraints();
+ cons.insets = new Insets(0, 0, 0, 5);
+ cons.fill = GridBagConstraints.HORIZONTAL;
+ cons.weightx = 1;
+ cons.gridx = 0;
- // View button group
- ButtonGroup viewButtonGroup = new ButtonGroup();
+ setupFileNameLabel();
+ labelPanel.add(fileNameLabel, cons);
- // Popup Menu
- final JPopupMenu viewTypePopupMenu = new JPopupMenu();
+ labelPanel.add(new JPanel(null), cons);
- final JRadioButtonMenuItem listViewMenuItem = new JRadioButtonMenuItem(
- filePane.getViewTypeAction(FilePane.VIEWTYPE_LIST));
- listViewMenuItem.setSelected(filePane.getViewType() == FilePane.VIEWTYPE_LIST);
- viewTypePopupMenu.add(listViewMenuItem);
- viewButtonGroup.add(listViewMenuItem);
-
- final JRadioButtonMenuItem detailsViewMenuItem = new JRadioButtonMenuItem(
- filePane.getViewTypeAction(FilePane.VIEWTYPE_DETAILS));
- detailsViewMenuItem.setSelected(filePane.getViewType() == FilePane.VIEWTYPE_DETAILS);
- viewTypePopupMenu.add(detailsViewMenuItem);
- viewButtonGroup.add(detailsViewMenuItem);
+ JLabel ftl = createFileTypeLabel();
+ labelPanel.add(ftl, cons);
- // Create icon for viewMenuButton
- BufferedImage image = new BufferedImage(viewMenuIcon.getIconWidth() + 7, viewMenuIcon.getIconHeight(),
- BufferedImage.TYPE_INT_ARGB);
- Graphics graphics = image.getGraphics();
- viewMenuIcon.paintIcon(filePane, graphics, 0, 0);
- int x = image.getWidth() - 5;
- int y = image.getHeight() / 2 - 1;
- graphics.setColor(Color.BLACK);
- graphics.fillPolygon(new int[]{x, x + 5, x + 2}, new int[]{y, y, y + 3}, 3);
+ cons.gridx = 1;
+ cons.insets = new Insets(0, 0, 0, 2);
- // Details Button
- final JButton viewMenuButton = createToolButton(null, new ImageIcon(image), viewMenuButtonToolTipText,
- viewMenuButtonAccessibleName);
+ getBottomPanel().add(labelPanel);
- viewMenuButton.addMouseListener(new MouseAdapter() {
- public void mousePressed(MouseEvent e) {
- if (SwingUtilities.isLeftMouseButton(e) && !viewMenuButton.isSelected()) {
- viewMenuButton.setSelected(true);
+ setupFileNameTextField();
- viewTypePopupMenu.show(viewMenuButton, 0, viewMenuButton.getHeight());
- }
+ if (fc.isMultiSelectionEnabled()) {
+ setFileName(fileNameString(fc.getSelectedFiles()));
+ } else {
+ setFileName(fileNameString(fc.getSelectedFile()));
}
- });
- viewMenuButton.addKeyListener(new KeyAdapter() {
- public void keyPressed(KeyEvent e) {
- // Forbid keyboard actions if the button is not in rollover state
- if (e.getKeyCode() == KeyEvent.VK_SPACE && viewMenuButton.getModel().isRollover()) {
- viewMenuButton.setSelected(true);
- viewTypePopupMenu.show(viewMenuButton, 0, viewMenuButton.getHeight());
- }
- }
- });
- viewTypePopupMenu.addPopupMenuListener(new PopupMenuListener() {
- public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
- }
+ labelPanel.add(filenameTextField, cons);
- public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- viewMenuButton.setSelected(false);
- }
- });
- }
+ JPanel spacer = new JPanel(null);
+ spacer.setPreferredSize(new Dimension(0, 3));
+ labelPanel.add(spacer, cons);
- public void popupMenuCanceled(PopupMenuEvent e) {
- }
- });
+ createFilterComboBox(fc, ftl);
+ labelPanel.add(filterComboBox, cons);
- topPanel.add(viewMenuButton);
+ getBottomToolbar().setBorder(new EmptyBorder(20, 4, 4, 4));
+ getBottomToolbar().setFloatable(false);
- topPanel.add(Box.createRigidArea(new Dimension(80, 0)));
+ getBottomToolbar().add(Box.createHorizontalGlue());
- filePane.addPropertyChangeListener(new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent e) {
- if ("viewType".equals(e.getPropertyName())) {
- switch (filePane.getViewType()) {
- case FilePane.VIEWTYPE_LIST:
- listViewMenuItem.setSelected(true);
- break;
+ getBottomToolbar().add(new JPanel() {
- case FilePane.VIEWTYPE_DETAILS:
- detailsViewMenuItem.setSelected(true);
- break;
- }
+ {
+ GroupLayout buttonPanelLayout = new GroupLayout(this);
+ setLayout(buttonPanelLayout);
+
+ setupApproveButton();
+ setupCancelButton();
+
+ add(approveButton);
+ add(cancelButton);
+
+ buttonPanelLayout.setHorizontalGroup(
+ buttonPanelLayout.createSequentialGroup().
+ addComponent(approveButton).
+ addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).
+ addComponent(cancelButton)
+ );
+ buttonPanelLayout.setVerticalGroup(
+ buttonPanelLayout.createParallelGroup().
+ addComponent(approveButton).
+ addComponent(cancelButton)
+ );
+ buttonPanelLayout.linkSize(approveButton, cancelButton);
}
+
+ private void setupApproveButton() {
+ approveButton = new JButton(getApproveButtonText(fc));
+ approveButton.setMnemonic(getApproveButtonMnemonic(fc));
+ approveButton.addActionListener(getApproveSelectionAction());
+ approveButton.setToolTipText(getApproveButtonToolTipText(fc));
+ approveButton.setMargin(new Insets(3, 15, 3, 15));
+ approveButton.setFont(getFont());
}
- });
- // ************************************** //
- // ******* Add the directory pane ******* //
- // ************************************** //
- centerPanel = new JPanel(new BorderLayout());
- centerPanel.add(getAccessoryPanel(), BorderLayout.AFTER_LINE_ENDS);
- JComponent accessory = fc.getAccessory();
- if(accessory != null) {
- getAccessoryPanel().add(accessory);
+ private Insets setupCancelButton() {
+ cancelButton = new JButton(cancelButtonText) {
+ public Dimension getMaximumSize() {
+ return approveButton.getPreferredSize().width > cancelButton.getPreferredSize().width
+ ? approveButton.getPreferredSize() : cancelButton.getPreferredSize();
}
- filePane.setPreferredSize(LIST_PREF_SIZE);
- centerPanel.add(filePane, BorderLayout.CENTER);
- fc.add(centerPanel, BorderLayout.CENTER);
+ };
- // ********************************** //
- // **** Construct the bottom panel ** //
- // ********************************** //
- getBottomPanel().setLayout(new BoxLayout(getBottomPanel(), BoxLayout.LINE_AXIS));
+ Insets buttonMargin = approveButton.getMargin();
+ cancelButton.setFont(getFont());
+ cancelButton.setMargin(buttonMargin);
+ cancelButton.setToolTipText(cancelButtonToolTipText);
+ cancelButton.addActionListener(getCancelSelectionAction());
+ return buttonMargin;
+ }
- // Add the bottom panel to file chooser
- centerPanel.add(getBottomPanel(), BorderLayout.SOUTH);
+ });
- // labels
- JPanel labelPanel = new JPanel();
- labelPanel.setLayout(new BoxLayout(labelPanel, BoxLayout.PAGE_AXIS));
- labelPanel.add(Box.createRigidArea(vstrut4));
+ if (fc.getControlButtonsAreShown()) {
+ addControlButtons();
+ }
+ }
- fileNameLabel = new JLabel();
- populateFileNameLabel();
- fileNameLabel.setAlignmentY(0);
- labelPanel.add(fileNameLabel);
+ private void createFilterComboBox(JFileChooser fc, JLabel ftl) {
+ filterComboBoxModel = createFilterComboBoxModel();
+ fc.addPropertyChangeListener(filterComboBoxModel);
+ filterComboBox = new JComboBox<FileFilter>(filterComboBoxModel);
+ ftl.setLabelFor(filterComboBox);
+ filterComboBox.setRenderer(createFilterComboBoxRenderer());
- labelPanel.add(Box.createRigidArea(new Dimension(1,12)));
+ filterComboBox.setFont(bottomPanel.getFont());
+ }
+ private JLabel createFileTypeLabel() {
JLabel ftl = new JLabel(filesOfTypeLabelText);
ftl.setDisplayedMnemonic(filesOfTypeLabelMnemonic);
- labelPanel.add(ftl);
-
- getBottomPanel().add(labelPanel);
- getBottomPanel().add(Box.createRigidArea(new Dimension(15, 0)));
+ ftl.setHorizontalAlignment(RIGHT);
+ ftl.setFont(getBottomPanel().getFont());
+ return ftl;
+ }
+ private void setupFileNameTextField() {
// file entry and filters
- JPanel fileAndFilterPanel = new JPanel();
- fileAndFilterPanel.add(Box.createRigidArea(vstrut8));
- fileAndFilterPanel.setLayout(new BoxLayout(fileAndFilterPanel, BoxLayout.Y_AXIS));
-
- @SuppressWarnings("serial") // anonymous class
- JTextField tmp3 = new JTextField(35) {
+ filenameTextField = new JTextField(35) {
public Dimension getMaximumSize() {
return new Dimension(Short.MAX_VALUE, super.getPreferredSize().height);
}
};
- filenameTextField = tmp3;
fileNameLabel.setLabelFor(filenameTextField);
filenameTextField.addFocusListener(
new FocusAdapter() {
+ @Override
public void focusGained(FocusEvent e) {
if (!getFileChooser().isMultiSelectionEnabled()) {
filePane.clearSelection();
}
}
+ });
+
+ filenameTextField.setFont(bottomPanel.getFont());
+ filenameTextField.setMargin(new Insets(2, 4, 2, 4));
}
- );
- if (fc.isMultiSelectionEnabled()) {
- setFileName(fileNameString(fc.getSelectedFiles()));
- } else {
- setFileName(fileNameString(fc.getSelectedFile()));
+ private void setupFileNameLabel() {
+ fileNameLabel = new JLabel();
+ populateFileNameLabel();
+ fileNameLabel.setHorizontalAlignment(RIGHT);
+ fileNameLabel.setAlignmentY(0);
+ fileNameLabel.setFont(getBottomPanel().getFont());
}
- fileAndFilterPanel.add(filenameTextField);
- fileAndFilterPanel.add(Box.createRigidArea(vstrut8));
+ private JPanel createTopContainer(JFileChooser fc) {
+ JPanel topContainer = new JPanel(new BorderLayout());
- filterComboBoxModel = createFilterComboBoxModel();
- fc.addPropertyChangeListener(filterComboBoxModel);
- filterComboBox = new JComboBox<FileFilter>(filterComboBoxModel);
- ftl.setLabelFor(filterComboBox);
- filterComboBox.setRenderer(createFilterComboBoxRenderer());
- fileAndFilterPanel.add(filterComboBox);
+ JToolBar topPanel = new JToolBar() {
- getBottomPanel().add(fileAndFilterPanel);
- getBottomPanel().add(Box.createRigidArea(new Dimension(30, 0)));
+ private boolean isWin7GradientBackground = false;
- // buttons
- getButtonPanel().setLayout(new BoxLayout(getButtonPanel(), BoxLayout.Y_AXIS));
+ {
+ setOpaque(true);
- @SuppressWarnings("serial") // anonymous class
- JButton tmp4 = new JButton(getApproveButtonText(fc)) {
- public Dimension getMaximumSize() {
- return approveButton.getPreferredSize().width > cancelButton.getPreferredSize().width ?
- approveButton.getPreferredSize() : cancelButton.getPreferredSize();
+/* switch (getType()) {
+ case WIN7:
+ isWin7GradientBackground
+ = Win32GraphicsEnvironment.isDWMCompositionEnabled();
+ setBackground(new Color(185, 209, 234));
+ // TODO: ablak unfókuszálásakor más szín kell
+ Win32GraphicsEnvironment.addDwmCompositionChangeListener(() -> {
+ isWin7GradientBackground
+ = Win32GraphicsEnvironment.isDWMCompositionEnabled();
+ repaint();
+ });
+
+ //setBackground(new Color(230, 240, 250));
+ break;
+ case WIN10:*/
+ setBackground(WHITE);/*
+ break;
+ case CLASSIC:
+ setBackground(SystemColor.control);
+ break;
+ default:
+ throw new UnsupportedOperationException();
+ }*/
}
+
+ @Override
+ protected void paintComponent(Graphics g) {
+ if (!isWin7GradientBackground) {
+ super.paintComponent(g);
+ return;
+ }
+
+ Graphics2D g2d = (Graphics2D) g;
+
+ g2d.setPaint(new GradientPaint(
+ 0, 0,
+ new Color(250, 252, 253),
+ 0, getHeight() / 2,
+ new Color(230, 240, 250)
+ ));
+ g2d.fillRect(0, 0, getWidth(), getHeight());
+ }
+
};
- approveButton = tmp4;
- Insets buttonMargin = approveButton.getMargin();
- buttonMargin = new InsetsUIResource(buttonMargin.top, buttonMargin.left + 5,
- buttonMargin.bottom, buttonMargin.right + 5);
- approveButton.setMargin(buttonMargin);
- approveButton.setMnemonic(getApproveButtonMnemonic(fc));
- approveButton.addActionListener(getApproveSelectionAction());
- approveButton.setToolTipText(getApproveButtonToolTipText(fc));
- getButtonPanel().add(Box.createRigidArea(vstrut6));
- getButtonPanel().add(approveButton);
- getButtonPanel().add(Box.createRigidArea(vstrut4));
+ topPanel.setBorder(new EmptyBorder(0, 4, 0, 0));
+ topPanel.setFloatable(false);
+ topPanel.putClientProperty("JToolBar.isRollover", Boolean.TRUE);
+ topPanel.setMaximumSize(new Dimension(0, 12));
+ topContainer.add(topPanel, BorderLayout.NORTH);
- @SuppressWarnings("serial") // anonymous class
- JButton tmp5 = new JButton(cancelButtonText) {
- public Dimension getMaximumSize() {
- return approveButton.getPreferredSize().width > cancelButton.getPreferredSize().width ?
- approveButton.getPreferredSize() : cancelButton.getPreferredSize();
+ JToolBar utilityToolBar = new JToolBar() {
+
+ private boolean isWin7Background;
+
+ {
+/* switch (getType()) {
+ case WIN7:
+ isWin7Background = true;
+ break;
+ case WIN10:*/
+ setBackground(new Color(245, 246, 247));/*
+ break;
+ }*/
+ }
+
+ @Override
+ protected void paintComponent(Graphics g) {
+ if (!isWin7Background) {
+ super.paintComponent(g);
+ return;
+ }
+
+ Graphics2D g2d = (Graphics2D) g;
+
+ g2d.setPaint(new LinearGradientPaint(
+ new Point2D.Double(0, 0),
+ new Point2D.Double(0, getHeight() / 2),
+ new float[]{0, 1},
+ new Color[]{new Color(250, 252, 253), new Color(230, 240, 250)}
+ ));
+ g2d.fillRect(0, 0, getWidth(), getHeight() / 2);
+
+ g2d.setPaint(new LinearGradientPaint(
+ new Point2D.Double(0, 0),
+ new Point2D.Double(0, getHeight() / 2),
+ new float[]{0, 1},
+ new Color[]{new Color(220, 230, 244), new Color(221, 233, 247)}
+ ));
+ g2d.fillRect(0, getHeight() / 2, getWidth(), getHeight() / 2);
}
+
+ @Override
+ protected void addImpl(Component comp, Object constraints, int index) {
+ super.addImpl(comp, constraints, index);
+ if(comp instanceof JButton) {
+ JButton btn = (JButton) comp;
+ btn.setBorder(new EmptyBorder(btn.getInsets()));
+ }
+ }
+
};
- cancelButton = tmp5;
- cancelButton.setMargin(buttonMargin);
- cancelButton.setToolTipText(cancelButtonToolTipText);
- cancelButton.addActionListener(getCancelSelectionAction());
- getButtonPanel().add(cancelButton);
+ utilityToolBar.setForeground(new Color(30, 57, 91));
+ utilityToolBar.setFloatable(false);
+ utilityToolBar.setOpaque(true);
+ utilityToolBar.setBorder(new MatteBorder(0, 0, 1, 0, new Color(232, 233, 234)));
+ topContainer.add(utilityToolBar, BorderLayout.CENTER);
+
+ // Back Button
+ JButton backFolderButton = createToolButton(getBackAction(),
+ new ImageIcon(initBackArrowImage()),
+ "BACKBUTTON TOOLTIP", "BACKBUTTON ACCESSIBLENAME");
+ topPanel.add(backFolderButton);
+
+ // Forward Button
+ JButton forwardFolderButton = createToolButton(getForwardAction(),
+ new ImageIcon(initForwardArrowImage()),
+ "FWBUTTON TOOLTIP", "FWBUTTON ACCESSIBLENAME");
+ topPanel.add(forwardFolderButton);
- if(fc.getControlButtonsAreShown()) {
- addControlButtons();
+ // Up Button
+ JButton upFolderButton = createToolButton(getChangeToParentDirectoryAction(),
+ new ImageIcon(initUpArrowImage()),
+ upFolderToolTipText, upFolderAccessibleName);
+ topPanel.add(upFolderButton);
+
+ // Refresh Button
+ JButton refreshButton = new JButton(getUpdateAction());
+ refreshButton.putClientProperty("WindowsButtonUI.displayAsInToolbar", TRUE);
+ refreshButton.putClientProperty("WindowsButtonUI.animateStateChange", TRUE);
+ refreshButton.setBackground(WHITE);
+ refreshButton.setPreferredSize(new Dimension(20, 22));
+ refreshButton.setBorder(new MatteBorder(1, 0, 1, 1,
+ new Color(217, 217, 217)));
+
+ // AddressBar
+ addressBar = new WindowsAddressBar(fc);
+
+ JPanel addressBarContainer = new JPanel(new BorderLayout());
+ addressBarContainer.setBorder(new EmptyBorder(5, 3, 7, 4));
+ addressBarContainer.setOpaque(false);
+ addressBarContainer.add(newSpaceFiller(), BorderLayout.NORTH);
+ addressBarContainer.add(addressBar, BorderLayout.CENTER);
+ addressBarContainer.add(newSpaceFiller(), BorderLayout.SOUTH);
+ addressBarContainer.add(refreshButton, BorderLayout.EAST);
+ topPanel.add(addressBarContainer);
+ topPanel.add(Box.createRigidArea(hstrut10));
+
+ // New Directory Button
+ if (!UIManager.getBoolean("FileChooser.readOnly")) {
+ JButton newFolderButton = new JButton(filePane.getNewFolderAction());
+ newFolderButton.setForeground(utilityToolBar.getForeground());
+ newFolderButton.setOpaque(false);
+ newFolderButton.setMargin(UTILITY_TOOLBAR_BUTTON_MARGIN);
+ newFolderButton.setToolTipText(newFolderToolTipText);
+ newFolderButton.getAccessibleContext().setAccessibleName(newFolderAccessibleName);
+ utilityToolBar.add(newFolderButton);
}
+
+ JPanel filler = new JPanel();
+ filler.setOpaque(false);
+ utilityToolBar.add(filler);
+
+ JButton viewMenuButton = createDetailsButton(createViewTypePopupMenu());
+ viewMenuButton.setForeground(utilityToolBar.getForeground());
+ viewMenuButton.setMargin(UTILITY_TOOLBAR_BUTTON_MARGIN);
+ utilityToolBar.add(viewMenuButton);
+
+ initViewTypeMenuIcon();
+
+ return topContainer;
}
- private void updateUseShellFolder() {
- // Decide whether to use the ShellFolder class to populate shortcut
- // panel and combobox.
- JFileChooser fc = getFileChooser();
+ private static JPanel newSpaceFiller() {
+ JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
+ panel.setOpaque(false);
+ return panel;
+ }
- if (FilePane.usesShellFolder(fc)) {
- if (placesBar == null && !UIManager.getBoolean("FileChooser.noPlacesBar")) {
- placesBar = new WindowsPlacesBar(fc, XPStyle.getXP() != null);
- fc.add(placesBar, BorderLayout.BEFORE_LINE_BEGINS);
- fc.addPropertyChangeListener(placesBar);
+ private void initViewTypeMenuIcon() {
+ // Create icon for viewMenuButton
+ BufferedImage image = new BufferedImage(viewMenuIcon.getIconWidth() + 7, viewMenuIcon.getIconHeight(),
+ BufferedImage.TYPE_INT_ARGB);
+ Graphics graphics = image.getGraphics();
+ viewMenuIcon.paintIcon(filePane, graphics, 0, 0);
+ int x = image.getWidth() - 5;
+ int y = image.getHeight() / 2 - 1;
+ graphics.setColor(Color.BLACK);
+ graphics.fillPolygon(new int[]{x, x + 5, x + 2}, new int[]{y, y, y + 3}, 3);
}
- } else {
- if (placesBar != null) {
- fc.remove(placesBar);
- fc.removePropertyChangeListener(placesBar);
- placesBar = null;
+
+ private JPopupMenu createViewTypePopupMenu() {
+ // View button group
+ ButtonGroup viewButtonGroup = new ButtonGroup();
+
+ // Popup Menu
+ final JPopupMenu viewTypePopupMenu = new JPopupMenu();
+
+ Map<ViewType, JRadioButtonMenuItem> viewTypeMenuItems
+ = new EnumMap<>(ViewType.class);
+
+ for (ViewType viewType : ViewType.values()) {
+ final JRadioButtonMenuItem menuItem = new JRadioButtonMenuItem(
+ filePane.getViewTypeAction(viewType));
+ menuItem.setSelected(filePane.getViewType() == viewType);
+ viewTypePopupMenu.add(menuItem);
+ viewButtonGroup.add(menuItem);
+
+ viewTypeMenuItems.put(viewType, menuItem);
+ }
+
+ filePane.addPropertyChangeListener(evt -> {
+ if ("viewType".equals(evt.getPropertyName())) {
+ viewTypeMenuItems.get(filePane.getViewType()).setSelected(true);
}
+ });
+
+ return viewTypePopupMenu;
+ }
+
+ private JButton createDetailsButton(final JPopupMenu viewTypePopupMenu) {
+ // Details Button
+ final JButton viewMenuButton = createToolButton(new AbstractAction("Rendezés"){
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ }
+ }, null, viewMenuButtonToolTipText,
+ viewMenuButtonAccessibleName);
+ viewMenuButton.addActionListener(evt->{
+ viewTypePopupMenu.show(viewMenuButton, 0, viewMenuButton.getHeight());
+ });
+ viewMenuButton.setOpaque(false);
+ viewMenuButton.setMargin(UTILITY_TOOLBAR_BUTTON_MARGIN);
+ viewTypePopupMenu.addPopupMenuListener(new PopupMenuListener() {
+ public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+ viewMenuButton.setSelected(true);
+ }
+
+ public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ viewMenuButton.setSelected(false);
+ }
+ });
+ }
+
+ public void popupMenuCanceled(PopupMenuEvent e) {
}
+ });
+ return viewMenuButton;
}
- protected JPanel getButtonPanel() {
- if(buttonPanel == null) {
- buttonPanel = new JPanel();
+ private JScrollPane navTreeScrollPane;
+
+ protected JToolBar getBottomToolbar() {
+ if (bottomToolbar == null) {
+ bottomToolbar = new JToolBar();
}
- return buttonPanel;
+ return bottomToolbar;
}
protected JPanel getBottomPanel() {
- if(bottomPanel == null) {
+ if (bottomPanel == null) {
bottomPanel = new JPanel();
}
return bottomPanel;
}
protected void installStrings(JFileChooser fc) {
super.installStrings(fc);
Locale l = fc.getLocale();
- lookInLabelMnemonic = getMnemonic("FileChooser.lookInLabelMnemonic", l);
- lookInLabelText = UIManager.getString("FileChooser.lookInLabelText",l);
- saveInLabelText = UIManager.getString("FileChooser.saveInLabelText",l);
-
fileNameLabelMnemonic = getMnemonic("FileChooser.fileNameLabelMnemonic", l);
- fileNameLabelText = UIManager.getString("FileChooser.fileNameLabelText",l);
- folderNameLabelMnemonic = getMnemonic("FileChooser.folderNameLabelMnemonic", l);
- folderNameLabelText = UIManager.getString("FileChooser.folderNameLabelText",l);
+ fileNameLabelText = UIManager.getString("FileChooser.fileNameLabelText", l);
filesOfTypeLabelMnemonic = getMnemonic("FileChooser.filesOfTypeLabelMnemonic", l);
- filesOfTypeLabelText = UIManager.getString("FileChooser.filesOfTypeLabelText",l);
+ filesOfTypeLabelText = UIManager.getString("FileChooser.filesOfTypeLabelText", l);
- upFolderToolTipText = UIManager.getString("FileChooser.upFolderToolTipText",l);
- upFolderAccessibleName = UIManager.getString("FileChooser.upFolderAccessibleName",l);
+ upFolderToolTipText = UIManager.getString("FileChooser.upFolderToolTipText", l);
+ upFolderAccessibleName = UIManager.getString("FileChooser.upFolderAccessibleName", l);
- newFolderToolTipText = UIManager.getString("FileChooser.newFolderToolTipText",l);
- newFolderAccessibleName = UIManager.getString("FileChooser.newFolderAccessibleName",l);
+ newFolderToolTipText = UIManager.getString("FileChooser.newFolderToolTipText", l);
+ newFolderAccessibleName = UIManager.getString("FileChooser.newFolderAccessibleName", l);
- viewMenuButtonToolTipText = UIManager.getString("FileChooser.viewMenuButtonToolTipText",l);
- viewMenuButtonAccessibleName = UIManager.getString("FileChooser.viewMenuButtonAccessibleName",l);
+ viewMenuButtonToolTipText = UIManager.getString("FileChooser.viewMenuButtonToolTipText", l);
+ viewMenuButtonAccessibleName = UIManager.getString("FileChooser.viewMenuButtonAccessibleName", l);
}
private Integer getMnemonic(String key, Locale l) {
return SwingUtilities2.getUIDefaultsInt(key, l);
}
protected void installListeners(JFileChooser fc) {
super.installListeners(fc);
ActionMap actionMap = getActionMap();
SwingUtilities.replaceUIActionMap(fc, actionMap);
+
+ fc.addPropertyChangeListener(JFileChooser.DIRECTORY_CHANGED_PROPERTY, evt -> {
+ if (!isInBack) {
+ if (!historyForward.isEmpty()) {
+ if (historyForward.peek().equals(evt.getNewValue())) {
+ historyForward.pop();
+ } else {
+ historyForward.clear();
+ }
+ }
+
+ if (evt.getOldValue() != null) {
+ historyBack.push((File) evt.getOldValue());
+ }
+ }
+
+ getBackAction().setEnabled(!historyBack.isEmpty());
+ getForwardAction().setEnabled(!historyForward.isEmpty());
+ });
}
protected ActionMap getActionMap() {
return createActionMap();
}
protected ActionMap createActionMap() {
ActionMap map = new ActionMapUIResource();
FilePane.addActionsToMap(map, filePane.getActions());
+ FilePane.addActionsToMap(map, new Action[]{getChangeToParentDirectoryAction()});
return map;
}
protected JPanel createList(JFileChooser fc) {
return filePane.createList();
@@ -594,30 +816,16 @@
*/
public ListSelectionListener createListSelectionListener(JFileChooser fc) {
return super.createListSelectionListener(fc);
}
- // Obsolete class, not used in this version.
- @SuppressWarnings("serial")
- protected class WindowsNewFolderAction extends NewFolderAction {
- }
-
- // Obsolete class, not used in this version.
- protected class SingleClickListener extends MouseAdapter {
- }
-
- // Obsolete class, not used in this version.
- @SuppressWarnings("serial") // Superclass is not serializable across versions
- protected class FileRenderer extends DefaultListCellRenderer {
- }
-
public void uninstallUI(JComponent c) {
// Remove listeners
c.removePropertyChangeListener(filterComboBoxModel);
c.removePropertyChangeListener(filePane);
- if (placesBar != null) {
- c.removePropertyChangeListener(placesBar);
+ if (navTree != null) {
+ c.removePropertyChangeListener(navTree);
}
cancelButton.removeActionListener(getCancelSelectionAction());
approveButton.removeActionListener(getApproveSelectionAction());
filenameTextField.removeActionListener(getApproveSelectionAction());
@@ -628,20 +836,17 @@
super.uninstallUI(c);
}
/**
- * Returns the preferred size of the specified
- * <code>JFileChooser</code>.
- * The preferred size is at least as large,
- * in both height and width,
- * as the preferred size recommended
- * by the file chooser's layout manager.
+ * Returns the preferred size of the specified <code>JFileChooser</code>.
+ * The preferred size is at least as large, in both height and width, as the
+ * preferred size recommended by the file chooser's layout manager.
*
* @param c a <code>JFileChooser</code>
- * @return a <code>Dimension</code> specifying the preferred
- * width and height of the file chooser
+ * @return a <code>Dimension</code> specifying the preferred width and
+ * height of the file chooser
*/
@Override
public Dimension getPreferredSize(JComponent c) {
int prefWidth = PREF_SIZE.width;
Dimension d = c.getLayout().preferredLayoutSize(c);
@@ -655,24 +860,24 @@
/**
* Returns the minimum size of the <code>JFileChooser</code>.
*
* @param c a <code>JFileChooser</code>
- * @return a <code>Dimension</code> specifying the minimum
- * width and height of the file chooser
+ * @return a <code>Dimension</code> specifying the minimum width and height
+ * of the file chooser
*/
@Override
public Dimension getMinimumSize(JComponent c) {
return new Dimension(MIN_WIDTH, MIN_HEIGHT);
}
/**
* Returns the maximum size of the <code>JFileChooser</code>.
*
* @param c a <code>JFileChooser</code>
- * @return a <code>Dimension</code> specifying the maximum
- * width and height of the file chooser
+ * @return a <code>Dimension</code> specifying the maximum width and height
+ * of the file chooser
*/
@Override
public Dimension getMaximumSize(JComponent c) {
return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
}
@@ -680,21 +885,21 @@
private String fileNameString(File file) {
if (file == null) {
return null;
} else {
JFileChooser fc = getFileChooser();
- if ((fc.isDirectorySelectionEnabled() && !fc.isFileSelectionEnabled()) ||
- (fc.isDirectorySelectionEnabled() && fc.isFileSelectionEnabled() && fc.getFileSystemView().isFileSystemRoot(file))){
+ if ((fc.isDirectorySelectionEnabled() && !fc.isFileSelectionEnabled())
+ || (fc.isDirectorySelectionEnabled() && fc.isFileSelectionEnabled() && fc.getFileSystemView().isFileSystemRoot(file))) {
return file.getPath();
} else {
return file.getName();
}
}
}
private String fileNameString(File[] files) {
- StringBuilder buf = new StringBuilder();
+ StringBuffer buf = new StringBuffer();
for (int i = 0; files != null && i < files.length; i++) {
if (i > 0) {
buf.append(" ");
}
if (files.length > 1) {
@@ -707,11 +912,10 @@
}
return buf.toString();
}
/* The following methods are used by the PropertyChange Listener */
-
private void doSelectedFileChanged(PropertyChangeEvent e) {
File f = (File) e.getNewValue();
JFileChooser fc = getFileChooser();
if (f != null
&& ((fc.isFileSelectionEnabled() && !f.isDirectory())
@@ -735,13 +939,11 @@
JFileChooser fc = getFileChooser();
FileSystemView fsv = fc.getFileSystemView();
clearIconCache();
File currentDirectory = fc.getCurrentDirectory();
- if(currentDirectory != null) {
- directoryComboBoxModel.addItem(currentDirectory);
-
+ if (currentDirectory != null) {
if (fc.isDirectorySelectionEnabled() && !fc.isFileSelectionEnabled()) {
if (fsv.isFileSystem(currentDirectory)) {
setFileName(currentDirectory.getPath());
} else {
setFileName(null);
@@ -772,16 +974,16 @@
setFileName(null);
}
}
private void doAccessoryChanged(PropertyChangeEvent e) {
- if(getAccessoryPanel() != null) {
- if(e.getOldValue() != null) {
+ if (getAccessoryPanel() != null) {
+ if (e.getOldValue() != null) {
getAccessoryPanel().remove((JComponent) e.getOldValue());
}
JComponent accessory = (JComponent) e.getNewValue();
- if(accessory != null) {
+ if (accessory != null) {
getAccessoryPanel().add(accessory, BorderLayout.CENTER);
}
}
}
@@ -795,23 +997,18 @@
private void doDialogTypeChanged(PropertyChangeEvent e) {
JFileChooser chooser = getFileChooser();
approveButton.setText(getApproveButtonText(chooser));
approveButton.setToolTipText(getApproveButtonToolTipText(chooser));
approveButton.setMnemonic(getApproveButtonMnemonic(chooser));
- if (chooser.getDialogType() == JFileChooser.SAVE_DIALOG) {
- lookInLabel.setText(saveInLabelText);
- } else {
- lookInLabel.setText(lookInLabelText);
- }
}
private void doApproveButtonMnemonicChanged(PropertyChangeEvent e) {
approveButton.setMnemonic(getApproveButtonMnemonic(getFileChooser()));
}
private void doControlButtonsChanged(PropertyChangeEvent e) {
- if(getFileChooser().getControlButtonsAreShown()) {
+ if (getFileChooser().getControlButtonsAreShown()) {
addControlButtons();
} else {
removeControlButtons();
}
}
@@ -819,61 +1016,71 @@
/*
* Listen for filechooser property changes, such as
* the selected file changing, or the type of the dialog changing.
*/
public PropertyChangeListener createPropertyChangeListener(JFileChooser fc) {
- return new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent e) {
+ return (PropertyChangeEvent e) -> {
String s = e.getPropertyName();
- if(s.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {
+ switch (s) {
+ case JFileChooser.SELECTED_FILE_CHANGED_PROPERTY:
doSelectedFileChanged(e);
- } else if (s.equals(JFileChooser.SELECTED_FILES_CHANGED_PROPERTY)) {
+ break;
+ case JFileChooser.SELECTED_FILES_CHANGED_PROPERTY:
doSelectedFilesChanged(e);
- } else if(s.equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY)) {
+ break;
+ case JFileChooser.DIRECTORY_CHANGED_PROPERTY:
doDirectoryChanged(e);
- } else if(s.equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) {
+ break;
+ case JFileChooser.FILE_FILTER_CHANGED_PROPERTY:
doFilterChanged(e);
- } else if(s.equals(JFileChooser.FILE_SELECTION_MODE_CHANGED_PROPERTY)) {
+ break;
+ case JFileChooser.FILE_SELECTION_MODE_CHANGED_PROPERTY:
doFileSelectionModeChanged(e);
- } else if(s.equals(JFileChooser.ACCESSORY_CHANGED_PROPERTY)) {
+ break;
+ case JFileChooser.ACCESSORY_CHANGED_PROPERTY:
doAccessoryChanged(e);
- } else if (s.equals(JFileChooser.APPROVE_BUTTON_TEXT_CHANGED_PROPERTY) ||
- s.equals(JFileChooser.APPROVE_BUTTON_TOOL_TIP_TEXT_CHANGED_PROPERTY)) {
+ break;
+ case JFileChooser.APPROVE_BUTTON_TEXT_CHANGED_PROPERTY:
+ case JFileChooser.APPROVE_BUTTON_TOOL_TIP_TEXT_CHANGED_PROPERTY:
doApproveButtonTextChanged(e);
- } else if(s.equals(JFileChooser.DIALOG_TYPE_CHANGED_PROPERTY)) {
+ break;
+ case JFileChooser.DIALOG_TYPE_CHANGED_PROPERTY:
doDialogTypeChanged(e);
- } else if(s.equals(JFileChooser.APPROVE_BUTTON_MNEMONIC_CHANGED_PROPERTY)) {
+ break;
+ case JFileChooser.APPROVE_BUTTON_MNEMONIC_CHANGED_PROPERTY:
doApproveButtonMnemonicChanged(e);
- } else if(s.equals(JFileChooser.CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY)) {
+ break;
+ case JFileChooser.CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY:
doControlButtonsChanged(e);
- } else if (s == "FileChooser.useShellFolder") {
- updateUseShellFolder();
+ break;
+ case "FileChooser.useShellFolder":
doDirectoryChanged(e);
- } else if (s.equals("componentOrientation")) {
- ComponentOrientation o = (ComponentOrientation)e.getNewValue();
- JFileChooser cc = (JFileChooser)e.getSource();
+ break;
+ case "componentOrientation":
+ ComponentOrientation o = (ComponentOrientation) e.getNewValue();
+ JFileChooser cc = (JFileChooser) e.getSource();
if (o != e.getOldValue()) {
cc.applyComponentOrientation(o);
}
- } else if (s.equals("ancestor")) {
+ break;
+ case "ancestor":
if (e.getOldValue() == null && e.getNewValue() != null) {
// Ancestor was added, set initial focus
filenameTextField.selectAll();
filenameTextField.requestFocus();
}
- }
+ break;
}
};
}
-
protected void removeControlButtons() {
- getBottomPanel().remove(getButtonPanel());
+ getBottomPanel().remove(getBottomToolbar());
}
protected void addControlButtons() {
- getBottomPanel().add(getButtonPanel());
+ getBottomPanel().add(getBottomToolbar(), BorderLayout.SOUTH);
}
public void ensureFileIsVisible(JFileChooser fc, File f) {
filePane.ensureFileIsVisible(fc, f);
}
@@ -881,19 +1088,20 @@
public void rescanCurrentDirectory(JFileChooser fc) {
filePane.rescanCurrentDirectory();
}
public String getFileName() {
- if(filenameTextField != null) {
+ if (filenameTextField != null) {
return filenameTextField.getText();
} else {
return null;
}
}
+ @Override
public void setFileName(String filename) {
- if(filenameTextField != null) {
+ if (filenameTextField != null) {
filenameTextField.setText(filename);
}
}
/**
@@ -901,60 +1109,78 @@
* This is normally called by the UI on a selection event.
*
* @param directorySelected if a directory is currently selected.
* @since 1.4
*/
+ @Override
protected void setDirectorySelected(boolean directorySelected) {
super.setDirectorySelected(directorySelected);
JFileChooser chooser = getFileChooser();
- if(directorySelected) {
+ if (directorySelected) {
approveButton.setText(directoryOpenButtonText);
approveButton.setToolTipText(directoryOpenButtonToolTipText);
approveButton.setMnemonic(directoryOpenButtonMnemonic);
} else {
approveButton.setText(getApproveButtonText(chooser));
approveButton.setToolTipText(getApproveButtonToolTipText(chooser));
approveButton.setMnemonic(getApproveButtonMnemonic(chooser));
}
}
+ @Override
+ public Action getUpdateAction() {
+ return new UpdateAction() {
+
+ {
+ putValue(Action.SMALL_ICON, new ImageIcon(initRefreshImage()));
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ rescanCurrentDirectory(getFileChooser());
+ }
+
+ };
+ }
+
+
public String getDirectoryName() {
- // PENDING(jeff) - get the name from the directory combobox
- return null;
+ System.out.println(getFileChooser().getCurrentDirectory().getPath());
+ return getFileChooser().getCurrentDirectory().getPath();
}
public void setDirectoryName(String dirname) {
// PENDING(jeff) - set the name in the directory combobox
}
- protected DirectoryComboBoxRenderer createDirectoryComboBoxRenderer(JFileChooser fc) {
- return new DirectoryComboBoxRenderer();
- }
-
- @SuppressWarnings("serial") // anonymous class
private static JButton createToolButton(Action a, Icon defaultIcon, String toolTipText, String accessibleName) {
final JButton result = new JButton(a);
+ if (defaultIcon != null) {
result.setText(null);
result.setIcon(defaultIcon);
+ }
result.setToolTipText(toolTipText);
result.setRequestFocusEnabled(false);
result.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY, accessibleName);
result.putClientProperty(WindowsLookAndFeel.HI_RES_DISABLED_ICON_CLIENT_KEY, Boolean.TRUE);
result.setAlignmentX(JComponent.LEFT_ALIGNMENT);
result.setAlignmentY(JComponent.CENTER_ALIGNMENT);
- result.setMargin(shrinkwrap);
+ result.setMargin(new Insets(5, 5, 5, 5));
+ result.setOpaque(false);
result.setFocusPainted(false);
result.setModel(new DefaultButtonModel() {
+ @Override
public void setPressed(boolean b) {
// Forbid keyboard actions if the button is not in rollover state
if (!b || isRollover()) {
super.setPressed(b);
}
}
+ @Override
public void setRollover(boolean b) {
if (b && !isRollover()) {
// Reset other buttons
for (Component component : result.getParent().getComponents()) {
if (component instanceof JButton && component != result) {
@@ -974,10 +1200,11 @@
} else {
stateMask &= ~(PRESSED | ARMED);
}
}
});
+ result.getModel().setEnabled(a.isEnabled());
result.addFocusListener(new FocusAdapter() {
public void focusGained(FocusEvent e) {
result.getModel().setRollover(true);
}
@@ -989,197 +1216,19 @@
return result;
}
//
- // Renderer for DirectoryComboBox
- //
- @SuppressWarnings("serial") // Superclass is not serializable across versions
- class DirectoryComboBoxRenderer extends DefaultListCellRenderer {
- IndentIcon ii = new IndentIcon();
- public Component getListCellRendererComponent(JList<?> list, Object value,
- int index, boolean isSelected,
- boolean cellHasFocus) {
-
- super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-
- if (value == null) {
- setText("");
- return this;
- }
- File directory = (File)value;
- setText(getFileChooser().getName(directory));
- Icon icon = getFileChooser().getIcon(directory);
- ii.icon = icon;
- ii.depth = directoryComboBoxModel.getDepth(index);
- setIcon(ii);
-
- return this;
- }
- }
-
- static final int space = 10;
- class IndentIcon implements Icon {
-
- Icon icon = null;
- int depth = 0;
-
- public void paintIcon(Component c, Graphics g, int x, int y) {
- if (c.getComponentOrientation().isLeftToRight()) {
- icon.paintIcon(c, g, x+depth*space, y);
- } else {
- icon.paintIcon(c, g, x, y);
- }
- }
-
- public int getIconWidth() {
- return icon.getIconWidth() + depth*space;
- }
-
- public int getIconHeight() {
- return icon.getIconHeight();
- }
-
- }
-
- //
- // DataModel for DirectoryComboxbox
- //
- protected DirectoryComboBoxModel createDirectoryComboBoxModel(JFileChooser fc) {
- return new DirectoryComboBoxModel();
- }
-
- /**
- * Data model for a type-face selection combo-box.
- */
- @SuppressWarnings("serial") // Superclass is not serializable across versions
- protected class DirectoryComboBoxModel extends AbstractListModel<File> implements ComboBoxModel<File> {
- Vector<File> directories = new Vector<File>();
- int[] depths = null;
- File selectedDirectory = null;
- JFileChooser chooser = getFileChooser();
- FileSystemView fsv = chooser.getFileSystemView();
-
- public DirectoryComboBoxModel() {
- // Add the current directory to the model, and make it the
- // selectedDirectory
- File dir = getFileChooser().getCurrentDirectory();
- if(dir != null) {
- addItem(dir);
- }
- }
-
- /**
- * Adds the directory to the model and sets it to be selected,
- * additionally clears out the previous selected directory and
- * the paths leading up to it, if any.
- */
- private void addItem(File directory) {
-
- if(directory == null) {
- return;
- }
-
- boolean useShellFolder = FilePane.usesShellFolder(chooser);
-
- directories.clear();
-
- File[] baseFolders = (useShellFolder)
- ? (File[]) ShellFolder.get("fileChooserComboBoxFolders")
- : fsv.getRoots();
- directories.addAll(Arrays.asList(baseFolders));
-
- // Get the canonical (full) path. This has the side
- // benefit of removing extraneous chars from the path,
- // for example /foo/bar/ becomes /foo/bar
- File canonical;
- try {
- canonical = directory.getCanonicalFile();
- } catch (IOException e) {
- // Maybe drive is not ready. Can't abort here.
- canonical = directory;
- }
-
- // create File instances of each directory leading up to the top
- try {
- File sf = useShellFolder ? ShellFolder.getShellFolder(canonical)
- : canonical;
- File f = sf;
- Vector<File> path = new Vector<File>(10);
- do {
- path.addElement(f);
- } while ((f = f.getParentFile()) != null);
-
- int pathCount = path.size();
- // Insert chain at appropriate place in vector
- for (int i = 0; i < pathCount; i++) {
- f = path.get(i);
- if (directories.contains(f)) {
- int topIndex = directories.indexOf(f);
- for (int j = i-1; j >= 0; j--) {
- directories.insertElementAt(path.get(j), topIndex+i-j);
- }
- break;
- }
- }
- calculateDepths();
- setSelectedItem(sf);
- } catch (FileNotFoundException ex) {
- calculateDepths();
- }
- }
-
- private void calculateDepths() {
- depths = new int[directories.size()];
- for (int i = 0; i < depths.length; i++) {
- File dir = directories.get(i);
- File parent = dir.getParentFile();
- depths[i] = 0;
- if (parent != null) {
- for (int j = i-1; j >= 0; j--) {
- if (parent.equals(directories.get(j))) {
- depths[i] = depths[j] + 1;
- break;
- }
- }
- }
- }
- }
-
- public int getDepth(int i) {
- return (depths != null && i >= 0 && i < depths.length) ? depths[i] : 0;
- }
-
- public void setSelectedItem(Object selectedDirectory) {
- this.selectedDirectory = (File)selectedDirectory;
- fireContentsChanged(this, -1, -1);
- }
-
- public Object getSelectedItem() {
- return selectedDirectory;
- }
-
- public int getSize() {
- return directories.size();
- }
-
- public File getElementAt(int index) {
- return directories.elementAt(index);
- }
- }
-
- //
// Renderer for Types ComboBox
//
protected FilterComboBoxRenderer createFilterComboBoxRenderer() {
return new FilterComboBoxRenderer();
}
/**
* Render different type sizes and styles.
*/
- @SuppressWarnings("serial") // Superclass is not serializable across versions
public class FilterComboBoxRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent(JList<?> list,
Object value, int index, boolean isSelected,
boolean cellHasFocus) {
@@ -1277,24 +1326,10 @@
if (!e.getValueIsAdjusting() && f != null && !getFileChooser().isTraversable(f)) {
setFileName(fileNameString(f));
}
}
- /**
- * Acts when DirectoryComboBox has changed the selected item.
- */
- protected class DirectoryComboBoxAction implements ActionListener {
-
-
-
-
- public void actionPerformed(ActionEvent e) {
- File f = (File)directoryComboBox.getSelectedItem();
- getFileChooser().setCurrentDirectory(f);
- }
- }
-
protected JButton getApproveButton(JFileChooser fc) {
return approveButton;
}
public FileView getFileView(JFileChooser fc) {
@@ -1320,6 +1355,566 @@
}
cacheIcon(f, icon);
return icon;
}
}
+
+ public static class WindowsFileListUI extends BasicListUI {
+
+ public static final Color ITEM_SELECTED_COLOR = new Color(204, 232, 255);
+ public static final Color ITEM_HOVERED_COLOR = new Color(229, 243, 255);
+ public static final Color ITEM_SELECTED_UNFOCUSED_COLOR = new Color(217, 217, 217);
+ public static final Color ITEM_SELECTED_BORDER_COLOR = new Color(153, 209, 255);
+ public static final Border ITEM_SELECTED_BORDER
+ = new LineBorder(ITEM_SELECTED_BORDER_COLOR);
+
+ public static final String HOVER_CELL_PROPERTY = "WindowsFileListUI.hoverCell";
+ public static final String CELL_WIDTH_PROPERTY = "WindowsFileListUI.cellWidth";
+
+ private Rectangle selectionRectangle;
+ private final JFileChooser fileChooser;
+
+ public WindowsFileListUI(JFileChooser fileChooser) {
+ this.fileChooser = fileChooser;
+ }
+
+ @Override
+ protected void installListeners() {
+ super.installListeners();
+
+ MouseAdapter mouseListener = new MouseAdapter() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ setHoverCell(-1);
+ }
+
+ @Override
+ public void mouseMoved(MouseEvent e) {
+ int hoverCell = list.locationToIndex(e.getPoint());
+ if (hoverCell != -1 && !list.getCellBounds(
+ hoverCell, hoverCell).contains(e.getPoint())) {
+ hoverCell = -1;
+ }
+ setHoverCell(hoverCell);
+ }
+
+ private void setHoverCell(int hoverCell) {
+ list.putClientProperty(HOVER_CELL_PROPERTY, hoverCell);
+ list.repaint();
+ }
+ private Point press;
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ press = e.getPoint();
+ }
+
+ @Override
+ public void mouseDragged(MouseEvent e) {
+ if (!fileChooser.isMultiSelectionEnabled()) {
+ return;
+ }
+
+ int x = press.x, y = press.y, w, h;
+
+ if (e.getX() < x) {
+ w = x - e.getX();
+ x -= w;
+ } else {
+ w = e.getX() - x;
+ }
+
+ if (e.getY() < y) {
+ h = y - e.getY();
+ y -= h;
+ } else {
+ h = e.getY() - y;
+ }
+
+ selectionRectangle = new Rectangle(x, y, w, h);
+
+ Set<Integer> toBeSelected = new HashSet<>();
+ for (int i = 0; i < list.getModel().getSize(); i++) {
+ if (list.getCellBounds(i, i).intersects(selectionRectangle)) {
+ toBeSelected.add(i);
+ }
+ }
+ list.getSelectionModel().clearSelection();
+ for (Integer cell : toBeSelected) {
+ list.getSelectionModel().addSelectionInterval(cell, cell);
+ }
+ list.repaint();
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ selectionRectangle = null;
+ list.repaint();
+ }
+
+ };
+
+ list.addMouseListener(mouseListener);
+ list.addMouseMotionListener(mouseListener);
+
+ list.addFocusListener(new FocusListener() {
+ @Override
+ public void focusGained(FocusEvent e) {
+ list.repaint();
+ }
+
+ @Override
+ public void focusLost(FocusEvent e) {
+ list.repaint();
+ }
+
+ });
+ }
+
+ @Override
+ protected void updateLayoutState() {
+ super.updateLayoutState();
+ list.putClientProperty(CELL_WIDTH_PROPERTY, cellWidth);
+ }
+
+ @Override
+ public void paint(Graphics g, JComponent c) {
+ super.paint(g, c);
+
+ if (selectionRectangle != null) {
+ g.setColor(new Color(0, 102, 204, 85));
+ g.fillRect(selectionRectangle.x, selectionRectangle.y,
+ selectionRectangle.width, selectionRectangle.height);
+
+ g.setColor(new Color(0, 128, 255, 204));
+ g.drawRect(selectionRectangle.x, selectionRectangle.y,
+ selectionRectangle.width, selectionRectangle.height);
+ }
+ }
+
+ }
+
+ public static class WindowsFileTableUI extends BasicTableUI {
+
+ public static final Border ITEM_SELECTED_BORDER_LEFT_CELL
+ = new CompoundBorder(
+ new MatteBorder(1, 1, 1, 0, ITEM_SELECTED_BORDER_COLOR),
+ new EmptyBorder(0, 0, 0, 1)
+ );
+
+ public static final Border ITEM_SELECTED_BORDER_MID_CELL
+ = new CompoundBorder(
+ new MatteBorder(1, 0, 1, 0, ITEM_SELECTED_BORDER_COLOR),
+ new EmptyBorder(0, 1, 0, 1)
+ );
+
+
+ public static final Border ITEM_SELECTED_BORDER_RIGHT_CELL
+ = new CompoundBorder(
+ new MatteBorder(1, 0, 1, 1, ITEM_SELECTED_BORDER_COLOR),
+ new EmptyBorder(0, 1, 0, 0)
+ );
+
+ private Rectangle selectionRectangle;
+ private final JFileChooser fileChooser;
+
+ public WindowsFileTableUI(JFileChooser fileChooser) {
+ this.fileChooser = fileChooser;
+ }
+
+ @Override
+ protected void installListeners() {
+ super.installListeners();
+
+ MouseAdapter mouseListener = new MouseAdapter() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ setHoverCell(-1);
+ }
+
+ @Override
+ public void mouseMoved(MouseEvent e) {
+ int hoverRow = table.rowAtPoint(e.getPoint());
+ if (hoverRow != -1 && !containsIgnoreX(
+ table.getCellRect(hoverRow, 0, true),
+ e.getPoint())) {
+ hoverRow = -1; // outside any row
+ }
+ setHoverCell(hoverRow);
+ }
+
+ private boolean containsIgnoreX(Rectangle rect, Point p) {
+ return p.y >= rect.y && p.y < rect.y + rect.height;
+ }
+
+ private void setHoverCell(int hoverCell) {
+ table.putClientProperty(HOVER_CELL_PROPERTY, hoverCell);
+ table.repaint();
+ }
+
+ private Point press;
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ press = e.getPoint();
+ }
+
+ @Override
+ public void mouseDragged(MouseEvent e) {
+ if (!fileChooser.isMultiSelectionEnabled()) {
+ return;
+ }
+
+ int x = press.x, y = press.y, w, h;
+
+ if (e.getX() < x) {
+ w = x - e.getX();
+ x -= w;
+ } else {
+ w = e.getX() - x;
+ }
+
+ if (e.getY() < y) {
+ h = y - e.getY();
+ y -= h;
+ } else {
+ h = e.getY() - y;
+ }
+
+ Rectangle rect = selectionRectangle == null ? new Rectangle()
+ : new Rectangle(selectionRectangle);
+ selectionRectangle = new Rectangle(x, y, w, h);
+
+ Rectangle union = selectionRectangle.union(rect);
+ union.x--;
+ union.y--;
+ union.width += 2;
+ union.height += 2;
+ table.paintImmediately(union);
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ selectionRectangle = null;
+ table.repaint();
+ }
+
+ };
+ table.addMouseListener(mouseListener);
+ table.addMouseMotionListener(mouseListener);
+
+ table.putClientProperty("FileChooser.supportsFileDrop", TRUE);
+ table.putClientProperty("FileChooser.instance", fileChooser);
+ table.putClientProperty("Table.noOutsideChecking", TRUE);
+ table.putClientProperty("Table.showWholeRowAsDropTarget", TRUE);
+ table.putClientProperty("BasicTableUI.cellWidthHack", Boolean.TRUE);
+
+ table.setDropMode(DropMode.ON);
+ }
+
+ @Override
+ public void paint(Graphics g, JComponent c) {
+ super.paint(g, c);
+
+ if (selectionRectangle != null) {
+ g.setColor(new Color(0, 102, 204, 85));
+ g.fillRect(selectionRectangle.x, selectionRectangle.y,
+ selectionRectangle.width, selectionRectangle.height);
+
+ g.setColor(new Color(0, 128, 255, 204));
+ g.drawRect(selectionRectangle.x, selectionRectangle.y,
+ selectionRectangle.width, selectionRectangle.height);
+ }
+ }
+ }
+
+ private static Image initBackArrowImage() {
+ BufferedImage img = new BufferedImage(12, 12, 6);
+ img.setRGB(0, 4, 16777216);
+ img.setRGB(0, 5, 1476395008);
+ img.setRGB(0, 6, 1409286144);
+ img.setRGB(0, 7, 16777216);
+ img.setRGB(1, 3, 16777216);
+ img.setRGB(1, 4, 1476395008);
+ img.setRGB(1, 5, 2130706432);
+ img.setRGB(1, 6, 2130706432);
+ img.setRGB(1, 7, 1409286144);
+ img.setRGB(1, 8, 16777216);
+ img.setRGB(2, 2, 16777216);
+ img.setRGB(2, 3, 1476395008);
+ img.setRGB(2, 4, 2130706432);
+ img.setRGB(2, 5, 2130706432);
+ img.setRGB(2, 6, 2130706432);
+ img.setRGB(2, 7, 2130706432);
+ img.setRGB(2, 8, 1409286144);
+ img.setRGB(2, 9, 16777216);
+ img.setRGB(3, 1, 16777216);
+ img.setRGB(3, 2, 1476395008);
+ img.setRGB(3, 3, 2130706432);
+ img.setRGB(3, 4, 1459617792);
+ img.setRGB(3, 5, 2130706432);
+ img.setRGB(3, 6, 2130706432);
+ img.setRGB(3, 7, 1509949440);
+ img.setRGB(3, 8, 2130706432);
+ img.setRGB(3, 9, 1409286144);
+ img.setRGB(3, 10, 16777216);
+ img.setRGB(4, 0, 16777216);
+ img.setRGB(4, 1, 1476395008);
+ img.setRGB(4, 2, 2130706432);
+ img.setRGB(4, 3, 1459617792);
+ img.setRGB(4, 4, 16777216);
+ img.setRGB(4, 5, 2130706432);
+ img.setRGB(4, 6, 2130706432);
+ img.setRGB(4, 7, 16777216);
+ img.setRGB(4, 8, 1509949440);
+ img.setRGB(4, 9, 2130706432);
+ img.setRGB(4, 10, 1409286144);
+ img.setRGB(4, 11, 16777216);
+ img.setRGB(5, 0, 452984832);
+ img.setRGB(5, 1, 2130706432);
+ img.setRGB(5, 2, 1459617792);
+ img.setRGB(5, 3, 16777216);
+ img.setRGB(5, 5, 2130706432);
+ img.setRGB(5, 6, 2130706432);
+ img.setRGB(5, 8, 16777216);
+ img.setRGB(5, 9, 1509949440);
+ img.setRGB(5, 10, 2130706432);
+ img.setRGB(5, 11, 402653184);
+ img.setRGB(6, 1, 469762048);
+ img.setRGB(6, 2, 16777216);
+ img.setRGB(6, 5, 2130706432);
+ img.setRGB(6, 6, 2130706432);
+ img.setRGB(6, 9, 16777216);
+ img.setRGB(6, 10, 419430400);
+ img.setRGB(7, 5, 2130706432);
+ img.setRGB(7, 6, 2130706432);
+ img.setRGB(8, 5, 2130706432);
+ img.setRGB(8, 6, 2130706432);
+ img.setRGB(9, 5, 2130706432);
+ img.setRGB(9, 6, 2130706432);
+ img.setRGB(10, 5, 2130706432);
+ img.setRGB(10, 6, 2130706432);
+ img.setRGB(11, 5, 2130706432);
+ img.setRGB(11, 6, 2130706432);
+ return img;
+ }
+
+ private static Image initForwardArrowImage() {
+ BufferedImage img = new BufferedImage(12, 12, 6);
+ img.setRGB(0, 5, 2130706432);
+ img.setRGB(0, 6, 2130706432);
+ img.setRGB(1, 5, 2130706432);
+ img.setRGB(1, 6, 2130706432);
+ img.setRGB(2, 5, 2130706432);
+ img.setRGB(2, 6, 2130706432);
+ img.setRGB(3, 5, 2130706432);
+ img.setRGB(3, 6, 2130706432);
+ img.setRGB(4, 5, 2130706432);
+ img.setRGB(4, 6, 2130706432);
+ img.setRGB(5, 1, 452984832);
+ img.setRGB(5, 2, 16777216);
+ img.setRGB(5, 5, 2130706432);
+ img.setRGB(5, 6, 2130706432);
+ img.setRGB(5, 9, 16777216);
+ img.setRGB(5, 10, 419430400);
+ img.setRGB(6, 0, 452984832);
+ img.setRGB(6, 1, 2130706432);
+ img.setRGB(6, 2, 1442840576);
+ img.setRGB(6, 3, 16777216);
+ img.setRGB(6, 5, 2130706432);
+ img.setRGB(6, 6, 2130706432);
+ img.setRGB(6, 8, 16777216);
+ img.setRGB(6, 9, 1509949440);
+ img.setRGB(6, 10, 2130706432);
+ img.setRGB(6, 11, 402653184);
+ img.setRGB(7, 0, 16777216);
+ img.setRGB(7, 1, 1476395008);
+ img.setRGB(7, 2, 2130706432);
+ img.setRGB(7, 3, 1442840576);
+ img.setRGB(7, 4, 16777216);
+ img.setRGB(7, 5, 2130706432);
+ img.setRGB(7, 6, 2130706432);
+ img.setRGB(7, 7, 16777216);
+ img.setRGB(7, 8, 1509949440);
+ img.setRGB(7, 9, 2130706432);
+ img.setRGB(7, 10, 1392508928);
+ img.setRGB(7, 11, 16777216);
+ img.setRGB(8, 1, 16777216);
+ img.setRGB(8, 2, 1476395008);
+ img.setRGB(8, 3, 2130706432);
+ img.setRGB(8, 4, 1442840576);
+ img.setRGB(8, 5, 2130706432);
+ img.setRGB(8, 6, 2130706432);
+ img.setRGB(8, 7, 1509949440);
+ img.setRGB(8, 8, 2130706432);
+ img.setRGB(8, 9, 1409286144);
+ img.setRGB(8, 10, 16777216);
+ img.setRGB(9, 2, 16777216);
+ img.setRGB(9, 3, 1476395008);
+ img.setRGB(9, 4, 2130706432);
+ img.setRGB(9, 5, 2130706432);
+ img.setRGB(9, 6, 2130706432);
+ img.setRGB(9, 7, 2130706432);
+ img.setRGB(9, 8, 1409286144);
+ img.setRGB(9, 9, 16777216);
+ img.setRGB(10, 3, 16777216);
+ img.setRGB(10, 4, 1476395008);
+ img.setRGB(10, 5, 2130706432);
+ img.setRGB(10, 6, 2130706432);
+ img.setRGB(10, 7, 1409286144);
+ img.setRGB(10, 8, 16777216);
+ img.setRGB(11, 4, 16777216);
+ img.setRGB(11, 5, 1476395008);
+ img.setRGB(11, 6, 1409286144);
+ img.setRGB(11, 7, 16777216);
+ return img;
+ }
+
+ private static Image initUpArrowImage() {
+ BufferedImage img = new BufferedImage(12, 13, 6);
+ img.setRGB(0, 5, 167772160);
+ img.setRGB(0, 6, 1325400064);
+ img.setRGB(0, 7, 117440512);
+ img.setRGB(1, 4, 167772160);
+ img.setRGB(1, 5, 1778384896);
+ img.setRGB(1, 6, 2130706432);
+ img.setRGB(1, 7, 1308622848);
+ img.setRGB(2, 3, 167772160);
+ img.setRGB(2, 4, 1778384896);
+ img.setRGB(2, 5, 2130706432);
+ img.setRGB(2, 6, 1778384896);
+ img.setRGB(2, 7, 167772160);
+ img.setRGB(3, 2, 167772160);
+ img.setRGB(3, 3, 1778384896);
+ img.setRGB(3, 4, 2130706432);
+ img.setRGB(3, 5, 1778384896);
+ img.setRGB(3, 6, 167772160);
+ img.setRGB(4, 1, 167772160);
+ img.setRGB(4, 2, 1778384896);
+ img.setRGB(4, 3, 2130706432);
+ img.setRGB(4, 4, 1778384896);
+ img.setRGB(4, 5, 167772160);
+ img.setRGB(5, 0, 167772160);
+ img.setRGB(5, 1, 1778384896);
+ img.setRGB(5, 2, 2130706432);
+ img.setRGB(5, 3, 2130706432);
+ img.setRGB(5, 4, 2130706432);
+ img.setRGB(5, 5, 2130706432);
+ img.setRGB(5, 6, 2130706432);
+ img.setRGB(5, 7, 2130706432);
+ img.setRGB(5, 8, 2130706432);
+ img.setRGB(5, 9, 2130706432);
+ img.setRGB(5, 10, 2130706432);
+ img.setRGB(5, 11, 2130706432);
+ img.setRGB(5, 12, 2130706432);
+ img.setRGB(6, 0, 167772160);
+ img.setRGB(6, 1, 1778384896);
+ img.setRGB(6, 2, 2130706432);
+ img.setRGB(6, 3, 2130706432);
+ img.setRGB(6, 4, 2130706432);
+ img.setRGB(6, 5, 2130706432);
+ img.setRGB(6, 6, 2130706432);
+ img.setRGB(6, 7, 2130706432);
+ img.setRGB(6, 8, 2130706432);
+ img.setRGB(6, 9, 2130706432);
+ img.setRGB(6, 10, 2130706432);
+ img.setRGB(6, 11, 2130706432);
+ img.setRGB(6, 12, 2130706432);
+ img.setRGB(7, 1, 184549376);
+ img.setRGB(7, 2, 1778384896);
+ img.setRGB(7, 3, 2130706432);
+ img.setRGB(7, 4, 1761607680);
+ img.setRGB(7, 5, 167772160);
+ img.setRGB(8, 2, 184549376);
+ img.setRGB(8, 3, 1778384896);
+ img.setRGB(8, 4, 2130706432);
+ img.setRGB(8, 5, 1744830464);
+ img.setRGB(8, 6, 167772160);
+ img.setRGB(9, 3, 184549376);
+ img.setRGB(9, 4, 1795162112);
+ img.setRGB(9, 5, 2130706432);
+ img.setRGB(9, 6, 1728053248);
+ img.setRGB(9, 7, 150994944);
+ img.setRGB(10, 4, 201326592);
+ img.setRGB(10, 5, 1795162112);
+ img.setRGB(10, 6, 2130706432);
+ img.setRGB(10, 7, 1258291200);
+ img.setRGB(11, 5, 201326592);
+ img.setRGB(11, 6, 1308622848);
+ img.setRGB(11, 7, 83886080);
+ return img;
+ }
+
+ private static Image initRefreshImage() {
+ BufferedImage img = new BufferedImage(10, 11, 6);
+ img.setRGB(0, 3, 385875968);
+ img.setRGB(0, 4, 1325400064);
+ img.setRGB(0, 5, 1778384896);
+ img.setRGB(0, 6, 1761607680);
+ img.setRGB(0, 7, 1308622848);
+ img.setRGB(0, 8, 369098752);
+ img.setRGB(1, 0, 2130706432);
+ img.setRGB(1, 1, 989855744);
+ img.setRGB(1, 2, 805306368);
+ img.setRGB(1, 3, 2097152000);
+ img.setRGB(1, 4, 2130706432);
+ img.setRGB(1, 5, 2013265920);
+ img.setRGB(1, 6, 1996488704);
+ img.setRGB(1, 7, 2130706432);
+ img.setRGB(1, 8, 2080374784);
+ img.setRGB(1, 9, 788529152);
+ img.setRGB(2, 0, 2130706432);
+ img.setRGB(2, 1, 1191182336);
+ img.setRGB(2, 2, 2097152000);
+ img.setRGB(2, 3, 1962934272);
+ img.setRGB(2, 4, 620756992);
+ img.setRGB(2, 7, 603979776);
+ img.setRGB(2, 8, 1979711488);
+ img.setRGB(2, 9, 2097152000);
+ img.setRGB(2, 10, 352321536);
+ img.setRGB(3, 0, 2130706432);
+ img.setRGB(3, 1, 1660944384);
+ img.setRGB(3, 2, 2130706432);
+ img.setRGB(3, 3, 637534208);
+ img.setRGB(3, 8, 687865856);
+ img.setRGB(3, 9, 2130706432);
+ img.setRGB(3, 10, 1308622848);
+ img.setRGB(4, 0, 2130706432);
+ img.setRGB(4, 1, 2097152000);
+ img.setRGB(4, 2, 1996488704);
+ img.setRGB(4, 3, 1006632960);
+ img.setRGB(4, 4, 1006632960);
+ img.setRGB(4, 9, 1996488704);
+ img.setRGB(4, 10, 1761607680);
+ img.setRGB(5, 0, 2130706432);
+ img.setRGB(5, 1, 2130706432);
+ img.setRGB(5, 2, 2130706432);
+ img.setRGB(5, 3, 2130706432);
+ img.setRGB(5, 4, 2130706432);
+ img.setRGB(5, 9, 1996488704);
+ img.setRGB(5, 10, 1761607680);
+ img.setRGB(6, 8, 687865856);
+ img.setRGB(6, 9, 2130706432);
+ img.setRGB(6, 10, 1308622848);
+ img.setRGB(7, 3, 587202560);
+ img.setRGB(7, 4, 603979776);
+ img.setRGB(7, 7, 603979776);
+ img.setRGB(7, 8, 1979711488);
+ img.setRGB(7, 9, 2097152000);
+ img.setRGB(7, 10, 369098752);
+ img.setRGB(8, 2, 150994944);
+ img.setRGB(8, 3, 1996488704);
+ img.setRGB(8, 4, 2130706432);
+ img.setRGB(8, 5, 1996488704);
+ img.setRGB(8, 6, 1996488704);
+ img.setRGB(8, 7, 2130706432);
+ img.setRGB(8, 8, 2080374784);
+ img.setRGB(8, 9, 788529152);
+ img.setRGB(9, 3, 369098752);
+ img.setRGB(9, 4, 1325400064);
+ img.setRGB(9, 5, 1778384896);
+ img.setRGB(9, 6, 1761607680);
+ img.setRGB(9, 7, 1308622848);
+ img.setRGB(9, 8, 369098752);
+ return img;
+ }
}
< prev index next >