/*
* Copyright ( c ) 2018 , 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 8194873 8292062
* @ requires ( os . family = = " Windows " )
* @ summary Checks that right ALT ( ALT_GRAPH ) key works on Swing components
* @ run main RightAltKeyTest
*/
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.KeyStroke;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.GridLayout;
import java.awt.Robot;
import java.lang.reflect.InvocationTargetException;
public class RightAltKeyTest {
boolean action = false ;
JFrame frame;
void testJMenu() {
frame = new JFrame("Menu Frame" );
JMenuBar mb = new JMenuBar();
JMenu m1 = new JMenu("File" );
JMenuItem i1 = new JMenuItem("Save" );
JMenuItem i2 = new JMenuItem("Load" );
m1.setMnemonic(KeyEvent.VK_F);
m1.addMenuListener(new MenuListener() {
@Override
public void menuSelected(MenuEvent e) {
action = true ;
disposeUI();
}
@Override
public void menuDeselected(MenuEvent e) {
}
@Override
public void menuCanceled(MenuEvent e) {
}
});
frame.setJMenuBar(mb);
mb.add(m1);
m1.add(i1);
m1.add(i2);
frame.setSize(200 , 200 );
frame.setVisible(true );
}
void testJMenuItem() {
frame = new JFrame("Menu Frame" );
JMenuBar mb = new JMenuBar();
JMenu m1 = new JMenu("File" );
JMenuItem i1 = new JMenuItem("Save" );
i1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.ALT_GRAPH_DOWN_MASK));
i1.addActionListener((e) -> {
action = true ;
disposeUI();
});
frame.setJMenuBar(mb);
mb.add(m1);
m1.add(i1);
frame.setSize(200 , 200 );
frame.setVisible(true );
}
void testJOptionPane() {
int selection = JOptionPane.showConfirmDialog(null , "Do you wish " +
"to save file?" ,"Confirm" , JOptionPane.YES_NO_CANCEL_OPTION);
//Pressed Yes
if (selection == 0 ) {
action = true ;
}
}
void testJTabbedPane() {
frame =new JFrame();
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JTabbedPane tp=new JTabbedPane();
tp.add("Main" ,p1);
tp.add("Visit" ,p2);
tp.setMnemonicAt(0 , KeyEvent.VK_M);
tp.setMnemonicAt(1 , KeyEvent.VK_V);
tp.addChangeListener((e) -> {
if (tp.getSelectedIndex() == 1 )
action = true ;
disposeUI();
});
frame.add(tp);
frame.setSize(200 ,200 );
frame.setVisible(true );
}
void testJTextArea() {
JTextField firstField = new JTextField(10 );
JTextField lastField = new JTextField(10 );
JLabel firstLabel = new JLabel("First Name" , JLabel.RIGHT);
firstLabel.setDisplayedMnemonic('F' );
firstLabel.setLabelFor(firstField);
JLabel lastLabel = new JLabel("Last Name" , JLabel.RIGHT);
lastLabel.setDisplayedMnemonic('L' );
lastLabel.setLabelFor(lastField);
JPanel p = new JPanel();
p.setLayout(new GridLayout(2 , 2 , 5 , 5 ));
p.add(firstLabel);
p.add(firstField);
p.add(lastLabel);
p.add(lastField);
frame = new JFrame("MnemonicLabels" );
lastField.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
action = true ;
disposeUI();
}
@Override
public void focusLost(FocusEvent e) {
}
});
frame.add(p);
frame.setSize(200 ,200 );
frame.setVisible(true );
}
void test() throws Exception {
UIManager.LookAndFeelInfo[] lookAndFeels = UIManager
.getInstalledLookAndFeels();
for (UIManager.LookAndFeelInfo lookAndFeel : lookAndFeels) {
UIManager.setLookAndFeel(lookAndFeel.getClassName());
Robot robot = new Robot();
robot.setAutoDelay(100 );
robot.waitForIdle();
action = false ;
SwingUtilities.invokeLater(this ::testJMenu);
robot.waitForIdle();
robot.keyPress(KeyEvent.VK_ALT_GRAPH);
robot.keyPress(KeyEvent.VK_F);
robot.keyRelease(KeyEvent.VK_F);
robot.keyRelease(KeyEvent.VK_ALT_GRAPH);
robot.waitForIdle();
if (!action)
errLog("JMenu" , lookAndFeel.getClassName());
action = false ;
SwingUtilities.invokeLater(this ::testJMenuItem);
robot.waitForIdle();
robot.keyPress(KeyEvent.VK_ALT_GRAPH);
robot.keyPress(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_ALT_GRAPH);
robot.waitForIdle();
if (!action)
errLog("JMenuItem" , lookAndFeel.getClassName());
action = false ;
SwingUtilities.invokeLater(this ::testJOptionPane);
robot.waitForIdle();
robot.keyPress(KeyEvent.VK_ALT_GRAPH);
robot.keyPress(KeyEvent.VK_Y);
robot.keyRelease(KeyEvent.VK_Y);
robot.keyRelease(KeyEvent.VK_ALT_GRAPH);
robot.waitForIdle();
if (!action)
errLog("JOptionPane" , lookAndFeel.getClassName());
action = false ;
SwingUtilities.invokeLater(this ::testJTabbedPane);
robot.waitForIdle();
robot.keyPress(KeyEvent.VK_ALT_GRAPH);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_ALT_GRAPH);
robot.waitForIdle();
if (!action)
errLog("JTabbedPane" , lookAndFeel.getClassName());
action = false ;
SwingUtilities.invokeLater(this ::testJTextArea);
robot.waitForIdle();
robot.keyPress(KeyEvent.VK_ALT_GRAPH);
robot.keyPress(KeyEvent.VK_L);
robot.keyRelease(KeyEvent.VK_L);
robot.keyRelease(KeyEvent.VK_ALT_GRAPH);
robot.waitForIdle();
if (!action)
errLog("JTextArea" , lookAndFeel.getClassName());
}
System.out.println("Passed." );
}
void disposeUI() {
frame.setVisible(false );
frame.dispose();
}
void errLog(String componentName, String lookAndFeel)
throws InvocationTargetException, InterruptedException
{
SwingUtilities.invokeAndWait(this ::disposeUI);
throw new RuntimeException("Actions are not performed for " +
componentName + " with " + lookAndFeel + " look and feel." );
}
public static void main(String[] args) throws Exception {
RightAltKeyTest t = new RightAltKeyTest();
t.test();
}
}
Messung V0.5 in Prozent C=94 H=92 G=92
¤ Dauer der Verarbeitung: 0.6 Sekunden
¤
*© Formatika GbR, Deutschland