BSS-Applications
BSS-Applications

Reputation: 11

Unable to set focus for keyboard input using WindowBuilder SWING UI

I've written a basic calculator type program using WindowsBuilder in Eclise neon and Java 1.8. It's pretty much complete, with everything working how I want it to. Except keyboard entry.

As a finishing touch I'd like to detect keyTyped events and map them to button presses so users can use the keyboard for entry instead of clicking buttons with the mouse.

I've added 'implements KeyListener' to the program class...

public class CashRegister implements KeyListener {
    private JTextField keyb;

I've tried to set a listener to a invisible JTextField called keyb....

private void initialize() {
    keyb = new JTextField(20);
    keyb.addKeyListener(this);
    keyb.setFocusable(true);
    keyb.requestFocusInWindow();

And I've added methods to handle the captured keypress...

public void keyTyped (KeyEvent e) {
    String out = "";
    out = out + e.getKeyChar();
    pence1text.setText(out);
}
public  void keyPressed (KeyEvent e) {

}
public  void keyReleased (KeyEvent e) {

}

So, at this stage all I'm expecting, prove it is working, is the keycharacter I press to appear in the textfield called 'pence1text'. However, it doesn't work, when I press the a key nothing is displayed.

I think it could be a focus problem. Googling around and checking stackoverlow lead me to add the following lines...

    keyb.setFocusable(true);
    keyb.requestFocusInWindow();

as above, but still no luck.

Does anyone have any ideas what I am doing wrong, or what I can try next?

Thanks

Upvotes: 0

Views: 486

Answers (2)

camickr
camickr

Reputation: 324108

As a finishing touch I'd like to detect keyTyped events and map them to button presses so users can use the keyboard for entry instead of clicking buttons with the mouse.

Don't use a KeyListener.

Instead you should be using Key Bindings. Read the section from the Swing tutorial on How to Use Key Bindings for basic information.

Also check out: how to put actionlistenerand actioncommand to multiple jbuttons for a working example that shows how you can apply the key bindings to a calculator.

Upvotes: 1

BSS-Applications
BSS-Applications

Reputation: 11

Thanks to user Andrew Thompson for pointing me back to the docs and a re-read.

The problem is that the JTextField is not visable and thus can't be given focus. If I add the listener to a textfield that is visable then the program works correctly. However if the user uses the mouse to click a button it loses focus and breaks the implementation...so I need to rethink the code and keep looking at focuse settings.

Upvotes: 1

Related Questions