Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Closing a dialog via keyboard



Excellent starting point! The code didn't quite work out of the box. I needed to change "Action" to AbstractAction". And the VK_CONTROL character actually needed to be a mask. I used Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() to get it in a platform independent way.

I also added the Escape key as an alternate way of closing it. Here is my code:

        AbstractAction act = new AbstractAction()
        {
            public void actionPerformed(ActionEvent e)
            {
                FindReplaceDialog.this.dispose();
            }
        };
        getRootPane().getActionMap().put("close", act);

int stdMask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
InputMap im = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) ;
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_W, stdMask), "close");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "close");



On Dec 8, 2004, at 2:04 PM, Illya Kysil wrote:

Bill Tschumy wrote:
I have a modal Find/Replace dialog that I would like to allow the user to close via the keyboard (either Cmd-W, or possible ESCAPE). Seems like in past versions of Java on OS X, hitting ESCAPE automatically closed the dialog. This no longer seems to be the case in 1.4.2.
I tried adding a single "Close" menu item to a menu attached to the dialog, but when I do this the menubar appears at the top of the dialog, not at the top of the screen like my main window's menubar does.
So what's the current proper way of getting Cmd-W (or Escape) to close a modal dialog?
You should put an action to root pane's ActionMap, something like
getRootPane().getActionMap().put("close",
new Action(){
  public void actionPerformed(ActionEvent e){
    dialog.dispose();
  }
});

then put a key binding into InputMap:
InputMap im = getRootPane().getInputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_W, KeyEvent.VK_CONTROL), "close");



--
Illya Kysil, software developer
Java/Delphi/C/C++/C#/Forth/Assembler
----------------------------------------------------------------------- --
No trees were harmed in the generation of this e-mail.
A significant number of electrons were, however, severely inconvenienced.


--
Bill Tschumy
Otherwise -- Austin, TX
http://www.otherwise.com

_______________________________________________
Do not post admin requests to the list. They will be ignored.
Java-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/java-dev/email@hidden

This email sent to email@hidden
References: 
 >Closing a dialog via keyboard (From: Bill Tschumy <email@hidden>)
 >Re: Closing a dialog via keyboard (From: Illya Kysil <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.