/* * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * 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. */ /* * @test * @key headful * @bug 8016665 * @summary verifies different behaviour of JFileChooser changing orientation * @run main JFileChooserOrientation */ import java.awt.Color; import java.awt.ComponentOrientation; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class JFileChooserOrientation { private static JFrame frame; private static GridBagLayout layout; private static JPanel panel; private static JPanel lookAndFeelPanel; private static JPanel orientationPanel; private static JPanel passFailPanel; private static JTextArea instructionsTextArea; private static JLabel lookAndFeelLabel; private static JLabel orientationLabel; private static JComboBox lookAndFeelComboBox; private static JComboBox orientationComboBox; private static JButton fileChooserButton; private static JButton passButton; private static JButton failButton; private static JFileChooser openChooser; private static UIManager.LookAndFeelInfo[] lookAndFeelArray; private static final String orientationLTR = " Left to Right"; private static final String orientationRTL = " Right to Left"; private static final String fileChooserString = "Show File Chooser"; public static void main(String[] args) throws Exception { createManualTestUI(); } private static void createManualTestUI() throws Exception { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { layout = new GridBagLayout(); GridBagConstraints gbc = new GridBagConstraints(); panel = new JPanel(layout); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridx = 0; gbc.gridy = 0; instructionsTextArea = new JTextArea(); String instructions = "1) Select Look and feel from combobox" + "\n2) Select component orientation" + "\n3) Click on \"Show File Chooser\"" + "\n4) Check if orientation is as selected" + "\n5) Press \"Cancel\" on the File Chooser Dialog" + "\n\n Perform steps 1- 4 for all LAFs & orientations" + "\n If all are correct press Pass or else press Fail"; instructionsTextArea.setText(instructions); instructionsTextArea.setBorder( BorderFactory.createLineBorder(Color.black)); panel.add(instructionsTextArea, gbc); lookAndFeelPanel = new JPanel(); lookAndFeelPanel.setBorder( BorderFactory.createLineBorder(Color.black)); lookAndFeelLabel = new JLabel("Look And Feel: "); gbc.gridx = 0; gbc.gridy = 0; lookAndFeelPanel.add(lookAndFeelLabel, gbc); lookAndFeelComboBox = new JComboBox(); lookAndFeelArray = UIManager.getInstalledLookAndFeels(); for (UIManager.LookAndFeelInfo lookAndFeelItem : lookAndFeelArray) { lookAndFeelComboBox.addItem(lookAndFeelItem.getClassName()); } gbc.gridx = 1; gbc.gridy = 0; lookAndFeelPanel.add(lookAndFeelComboBox, gbc); gbc.gridx = 0; gbc.gridy = 1; panel.add(lookAndFeelPanel, gbc); orientationPanel = new JPanel(); orientationPanel.setBorder( BorderFactory.createLineBorder(Color.black)); orientationLabel = new JLabel("Orientation: "); gbc.gridx = 0; gbc.gridy = 0; orientationPanel.add(orientationLabel, gbc); orientationComboBox = new JComboBox(); orientationComboBox.addItem(orientationLTR); orientationComboBox.addItem(orientationRTL); gbc.gridx = 1; gbc.gridy = 0; orientationPanel.add(orientationComboBox, gbc); gbc.gridx = 0; gbc.gridy = 2; panel.add(orientationPanel, gbc); fileChooserButton = new JButton(fileChooserString); fileChooserButton.setActionCommand(fileChooserString); fileChooserButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { showFileChooser(); } catch (Exception ex) { Logger.getLogger(JFileChooserOrientation.class .getName()).log(Level.SEVERE, null, ex); } } }); gbc.gridx = 0; gbc.gridy = 3; panel.add(fileChooserButton, gbc); passFailPanel = new JPanel(); passFailPanel.setBorder(BorderFactory.createLineBorder(Color.black)); passButton = new JButton(" Pass "); passButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { pass(); } catch (Exception ex) { Logger.getLogger(JFileChooserOrientation.class .getName()).log(Level.SEVERE, null, ex); } } }); gbc.gridx = 0; gbc.gridy = 0; passFailPanel.add(passButton, gbc); failButton = new JButton(" Fail "); failButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { fail(); } catch (Exception ex) { Logger.getLogger(JFileChooserOrientation.class .getName()).log(Level.SEVERE, null, ex); } } }); gbc.gridx = 1; gbc.gridy = 0; passFailPanel.add(failButton, gbc); gbc.gridx = 0; gbc.gridy = 4; panel.add(passFailPanel, gbc); frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(panel); frame.pack(); frame.setVisible(true); } }); } private static void pass() throws Exception { frame.dispose(); } private static void fail() throws Exception { frame.dispose(); System.err.println(lookAndFeelComboBox.getSelectedItem().toString() + " : Incorrect Orientation"); } private static void showFileChooser() throws Exception { if (tryLookAndFeel(lookAndFeelComboBox.getSelectedItem().toString())) { openChooser = new JFileChooser(); ComponentOrientation orientation = ComponentOrientation.UNKNOWN; switch (orientationComboBox.getSelectedItem().toString()) { case orientationLTR: orientation = ComponentOrientation.LEFT_TO_RIGHT; break; case orientationRTL: orientation = ComponentOrientation.RIGHT_TO_LEFT; break; } openChooser.setComponentOrientation(orientation); openChooser.showOpenDialog(frame); } } private static boolean tryLookAndFeel(String lookAndFeelString) throws Exception { try { UIManager.setLookAndFeel( lookAndFeelString); } catch (UnsupportedLookAndFeelException | ClassNotFoundException | InstantiationException | IllegalAccessException e) { return false; } return true; } }