import com.sun.glass.ui.Robot; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javafx.embed.swing.SwingNode; import javafx.stage.Stage; import javax.swing.JInternalFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.SwingUtilities; /** * * @author Andrei Eremeev */ public class SwingNodeJMenuBar extends SwingNodeBaseTest { private boolean isMac; private JInternalFrame frame; private MenuListener listener; private boolean flag = true; @Override protected void init(SwingNode node) throws Exception { isMac = System.getProperty("os.name").toLowerCase().contains("os x"); frame = new JInternalFrame(); JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("Main menu"); listener = new MenuListener(); menu.setMnemonic(KeyEvent.VK_M); menuBar.add(menu); JMenuItem item = new JMenuItem("A", KeyEvent.VK_A); item.addActionListener(listener); menu.add(item); item = new JMenuItem("B", KeyEvent.VK_B); item.addActionListener(listener); menu.add(item); item = new JMenuItem("C", KeyEvent.VK_C); item.addActionListener(listener); menu.add(item); frame.setJMenuBar(menuBar); frame.setVisible(true); node.setContent(frame); } private void typeHotKey(Robot robot, int key) { robot.keyPress(KeyEvent.VK_ALT); if (isMac) { robot.keyPress(KeyEvent.VK_SHIFT); } robot.keyPress(key); delay(50); robot.keyRelease(key); if (isMac) { robot.keyRelease(KeyEvent.VK_SHIFT); } robot.keyRelease(KeyEvent.VK_ALT); } @Override protected void doTest(Stage stage) throws Exception { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { frame.requestFocus(); } }); Robot robot = createRobot(); typeHotKey(robot, KeyEvent.VK_M); delay(50); typeHotKey(robot, KeyEvent.VK_A); delay(50); if (!listener.isTrigered) { flag = false; System.err.println("MenuItem did not get key event"); } else { System.err.println("MenuItem got key event"); } typeHotKey(robot, KeyEvent.VK_C); delay(50); if (!listener.isTrigered) { flag = false; System.err.println("MenuItem did not get key event"); } else { System.err.println("MenuItem got key event"); } } @Override protected boolean check() { return flag; } private static class MenuListener implements ActionListener { public volatile boolean isTrigered; public void reset() { isTrigered = false; } @Override public void actionPerformed(ActionEvent e) { isTrigered = true; System.err.println("MenuItem got key event : " + e); } } }