When i run the code above the frame's menu bar come up when the mouse moves to the upper part of the window. The problem is when i open the menu but do not select any item and move out the mouse the menu bar get invisible but the items stay on screen.
What i'm going to archive is a "auto-hide" menu bar that get be visible when the mouse enters a certain region in the JFrame.
public class Test extends JFrame {
public Test() {
setLayout(new BorderLayout());
setSize(300, 300);
JMenuBar mb = new JMenuBar();
setJMenuBar(mb);
mb.setVisible(false);
JMenu menu = new JMenu("File");
mb.add(menu);
menu.add(new JMenuItem("Item-1"));
menu.add(new JMenuItem("Item-2"));
addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
getJMenuBar().setVisible(e.getY() < 50);
}
});
}
public static void main(String args[]) {
new Test().setVisible(true);
}
}
Update
I think i found a workaround: if the menu bar is visible and the JFrame receives a mouse move event then send the ESC key to close any open menu.
addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
if (getJMenuBar().isVisible()) {
try {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ESCAPE);
} catch (AWTException ex) {
}
}
getJMenuBar().setVisible(e.getY() < 50);
}
});
This workaround depends on the look and feel (meaning of the ESC key). Anyway, for me it is ok.