Re: event listener (how to)
On 8/8/2011 7:16 PM, wee wrote:
hello,
i added an actionListener to a JButton. it works well when i click it
with a mouse. if i put the focus on the button using the tab key and
press the keyboard enter key, nothing happens. my question then is,
how can i make the JButton react to both mouse click and the keyboard
enter key? do i need to add a keypressed listener on top of the
actionListener? any help would be appreciated.
I think you want to use a key binding:
<http://download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html>
package test;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
public class EventTest {
public static void main( String[] args )
{
SwingUtilities.invokeLater( new Runnable()
{
public void run()
{
createGui();
}
} );
}
private static void createGui() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JButton b = new JButton( "Test me!" );
b.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
System.out.println( "Action: "+ e );
}
} );
b.getInputMap().put( KeyStroke.getKeyStroke( "ENTER" ),
"Enter!!!");
Action printAction = new AbstractAction() {
public void actionPerformed( ActionEvent e )
{
System.out.println( "Print Action:" );
System.out.println( e );
}
};
b.getActionMap().put( "Enter!!!", printAction );
panel.add( b );
frame.add( panel );
frame.pack();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
}