aspose file tools*
The moose likes Swing / AWT / SWT and the fly likes key listener not detected Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Java 8 in Action this week in the Java 8 forum!
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark "key listener not detected" Watch "key listener not detected" New topic
Author

key listener not detected

ram shyam
Ranch Hand

Joined: May 04, 2007
Posts: 77
Hi all,

I am using KeyListener in my code, to detect a keyPressed Event on a JDialog pop-up window. But the event is not detected.
This is the code used -

class MyDialog extends JDialog
{
public MyDialog()
{
// code for the contents of the JDialog

addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_F1);
{
// some more code....
}
}
});
// other code....
}}

Please let me where I am going wrong in this and why the key pressed event is not detected.

Thanks in advance!!!
Michael Dunn
Ranch Hand

Joined: Jun 09, 2003
Posts: 4632
is the dialog modal?

do you have this line
addKeyListener(new KeyAdapter()...

before or after this line
setVisible(true);
ram shyam
Ranch Hand

Joined: May 04, 2007
Posts: 77
hi,

Yes, the dialog is modal.

Here is the complete code.

public MyDialog()
{
setModal(true);
setTitle("....");

// Create a JPanel - myPanel
// Add some fields in this panel

Object[] array = {myPanel};

// Create a JOptionPane - optionPane
//add the myPanel, ok , Cancel buttons

setContentPane(optionPane);

//here is the keyListener code -

addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_F1);
{
// some code
}
}
}
});

optionPane.addPropertyChangeListener(new PropertyChangeListener()
{
public void propertyChange(PropertyChangeEvent e)
{
// code to perform some operation based on OK / Cancel
setVisible(false); // after Ok/Cancel is pressed.
}

} );

setSize(300, 300);
}

This is the code. Please let me know what is wrong in this code.

Thanks in advance!!!
Michael Dunn
Ranch Hand

Joined: Jun 09, 2003
Posts: 4632
keyListeners work when the component has focus.

your code looks as though the dialog would never receive focus,
focus going between the components on the panel, and the optionpane buttons

for an F1 (help?) key, use KeyBindings

http://java.sun.com/docs/books/tutorial/uiswing/misc/keybinding.html
ram shyam
Ranch Hand

Joined: May 04, 2007
Posts: 77
Hi,

Many thanks for your help and valuable time!!


The issue got resolved now. Thanks a lot once again!

Regards,
Ram Shyam
ram shyam
Ranch Hand

Joined: May 04, 2007
Posts: 77
Hi,

I have one more query in this.
I have got the required action implemented when "F1" is pressed with getInputMap()and get getActionMap() as suggested by you. But the problem is that, I am opening a Help screen when "F1" is pressed. This help screen cannot be accessed until I press OK/Cancel or close the MyDialog which detects the key bindings.

Please let me know whether this is the default behavior or any solution to this.

Many thanks in advance!!
Michael Dunn
Ranch Hand

Joined: Jun 09, 2003
Posts: 4632
the 'help' dialog needs to have the original dialog as the parent
ram shyam
Ranch Hand

Joined: May 04, 2007
Posts: 77
Hi,

My GUI works as follows -

I have a page containing JTable in which if I click a row, a JDialog is popped-up. In this JDialog only, I have used the key bindings as follows-

Action anAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
//code
}
};
optionPane.getInputMap().put(KeyStroke.getKeyStroke("F1"), "showHelp");
optionPane.getActionMap().put("showHelp",anAction);


On pressing F1 on the pop-up, I am able to get the help screen up but not able to access it unless i close the pop-up. As per your suggestion, I am not able to get the clear picture of how to set the parent here.
Please explain me in detail to solve this issue.

Many thanks in advance!!
Michael Dunn
Ranch Hand

Joined: Jun 09, 2003
Posts: 4632
dialog1 = In this JDialog only, I have used the key bindings as follows-
dialog2 = On pressing F1 on the pop-up, I am able to get the help screen

when you create dialog2
JDialog dialog2 = new JDialog(dialog1);
ram shyam
Ranch Hand

Joined: May 04, 2007
Posts: 77
Hi,

Thanks for your response.

I will implement the same and get back to you.

Many thanks for your help!!
ram shyam
Ranch Hand

Joined: May 04, 2007
Posts: 77
Hi,

The help screen I am using is of type JFrame. So, constructor JFrame(new JDialog()) is not defined.
Hence, your solution doesnt work for me. Moreover, these help screens are already defined and being used by many other pages in the GUI. So, the new pop-up I implemented should also use the same JFrame help screen, but the problem is that, the screen is not accessible.

Please let me know if there is any other way of implementing this.

Many thanks in advance!!!
ram shyam
Ranch Hand

Joined: May 04, 2007
Posts: 77
Hi,

Can anyone help me in resolving this issue?

Many thanks in advance!!
Michael Dunn
Ranch Hand

Joined: Jun 09, 2003
Posts: 4632
I doubt you're going to achieve what you want using a JFrame for the help screen.

you can still create the frame, not set it to visible, then do something like this
ram shyam
Ranch Hand

Joined: May 04, 2007
Posts: 77
Hi,

From your code, I understand that-

parent - the dialog pop-up window from my JTable.
dialog - the help screen.

But, what is the frame here?
As I mentioned earlier, the help screen should be of type JFrame and I cannot change my dialog pop-up to JFrame.
So, still the problem is not resolved :-(

Please explain how can this be resolved.

Many thanks in advance!
Michael Dunn
Ranch Hand

Joined: Jun 09, 2003
Posts: 4632
> But, what is the frame here?

frame comes from your earlier post
"The help screen I am using is of type JFrame."
ram shyam
Ranch Hand

Joined: May 04, 2007
Posts: 77
Hi,

Sorry for the delayed response as I was held up in other tasks.

Currently my implementation is as follows -

I have a parent screen containing a JTable from which I get a JDialog. This dialog has its content pane set to a JOptionPane and this optionpane is popped-up. In this optionPane, if I press F1, I get the JFrame help screen but its not accessible.

Since the JoptionPane is used as the contentpane for the JDialog, how can I set the frame as its content now?

Please let me know how to resolve this.

Many thanks for your help!!
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: key listener not detected
 
Similar Threads
SWING - Changing java cup to my gif
Painting from one class to another
JDialog
JFrame always on top
How to connect and send data to FormMail?