2017-05-02 75 views
0

我已經在Eclise neon和Java 1.8中使用WindowsBuilder編寫了一個基本的計算器類型程序。它非常完整,一切都按照我想要的方式工作。除了鍵盤輸入。無法使用WindowBuilder SWING UI爲鍵盤輸入設置焦點

作爲畫龍點睛,我想檢測keyTyped事件並將它們映射到按鈕按鈕,以便用戶可以使用鍵盤輸入而不是用鼠標單擊按鈕。

我已經添加了'實現的KeyListener對計劃類...

public class CashRegister implements KeyListener { 
    private JTextField keyb; 

我試圖監聽器設置爲不可見的JTextField稱爲KEYB ....

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

而且我已經添加的方法來處理捕獲的按鍵...

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

} 
public void keyReleased (KeyEvent e) { 

} 

所以,在這個階段,所有我很期待,證明正在工作,是我按下出現在名爲'pence1text'的文本框中的關鍵字符。但是,它不起作用,當我按下a鍵時什麼也不顯示。

我認爲這可能是一個焦點問題。谷歌搜索和檢查stackoverlow導致我添加以下行...

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

如上所述,但仍然沒有運氣。

有沒有人有任何想法我做錯了什麼,或者我可以嘗試下一步?

感謝

+0

'public boolean requestFocusInWindow()''boolean'返回的值是什麼?打賭它是'假'。 –

+0

是的,它返回false。我認爲這是問題。我錯過了什麼?謝謝。 –

+0

嘗試閱讀[this](https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)文章。使用修飾符「JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT」註冊根窗格的所有操作。 –

回答

1

由於用戶安德魯·湯普森指着我回文檔和重讀。

問題是JTextField不可見,因此無法給予焦點。如果我將偵聽器添加到可見的文本字段,則程序將正常工作。但是,如果用戶使用鼠標單擊按鈕,它會失去焦點並破壞實現...所以我需要重新考慮代碼並繼續查看focuse設置。

相關問題