blob: 99b53a034efe29fdce77222b59981b55d57a9f64 [file] [log] [blame]
/*
* 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;
}
}