blob: 052b383a10d5dc70f2ed260ddff4a3400b5720e9 [file] [log] [blame]
/*
* Copyright (c) 2014, 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
* @library ../../regtesthelpers
* @build Util
* @bug 8036819
* @summary JAB: mnemonics not read for textboxes
* @author Vivi An
* @run main bug8036819
*/
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;
import javax.accessibility.*;
public class bug8036819 {
public static volatile Boolean passed = false;
public static void main(String args[]) throws Throwable {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
createAndShowGUI();
}
});
Robot robo = new Robot();
robo.setAutoDelay(300);
robo.waitForIdle();
// Using mnemonic key to focus on the textfield
Util.hitMnemonics(robo, KeyEvent.VK_P);
robo.waitForIdle();
if (!passed){
throw new RuntimeException("Test failed.");
}
}
private static void createAndShowGUI() {
JFrame mainFrame = new JFrame("bug 8036819");
JLabel usernameLabel = new JLabel("Username: ");
JTextField usernameField = new JTextField(20);
usernameLabel.setDisplayedMnemonic(KeyEvent.VK_U);
usernameLabel.setLabelFor(usernameField);
JLabel pwdLabel = new JLabel("Password: ");
JTextField pwdField = new JTextField(20);
pwdLabel.setDisplayedMnemonic(KeyEvent.VK_P);
pwdLabel.setLabelFor(pwdField);
pwdField.addKeyListener(
new KeyListener(){
@Override
public void keyPressed(KeyEvent keyEvent) {
}
@Override
public void keyTyped(KeyEvent keyEvent) {
}
@Override
public void keyReleased(KeyEvent keyEvent){
JComponent comp = (JComponent) pwdField;
AccessibleContext ac = comp.getAccessibleContext();
AccessibleExtendedComponent aec = (AccessibleExtendedComponent)ac.getAccessibleComponent();
AccessibleKeyBinding akb = aec.getAccessibleKeyBinding();
if (akb != null){
int count = akb.getAccessibleKeyBindingCount();
if (count != 1){
passed = false;
return;
}
// there is 1 accessible key for the text field
System.out.println("Retrieved AccessibleKeyBinding for textfield " + count);
// the key code is KeyEvent.VK_P
Object o = akb.getAccessibleKeyBinding(0);
if (o instanceof KeyStroke){
javax.swing.KeyStroke key = (javax.swing.KeyStroke)o;
System.out.println("keystroke is " + key.getKeyCode());
if (key.getKeyCode() == KeyEvent.VK_P)
passed = true;
}
}
}
}
);
mainFrame.getContentPane().add(usernameLabel);
mainFrame.getContentPane().add(usernameField);
mainFrame.getContentPane().add(pwdLabel);
mainFrame.getContentPane().add(pwdField);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setLayout(new FlowLayout(FlowLayout.LEFT));
mainFrame.setSize(200, 200);
mainFrame.setLocation(200, 200);
mainFrame.setVisible(true);
mainFrame.toFront();
}
}