2015-06-18 192 views
0

此代碼的工作很適合我,使鍵綁定更舒適,通過調用諸如那些遵循:如何在密鑰綁定中使用密鑰名稱?

import java.awt.event.ActionEvent; 
import javax.swing.*; 
import static javax.swing.KeyStroke.getKeyStroke; 

public abstract class KeyBoundButton extends JButton{ 

    public abstract void action(ActionEvent e); 

    public KeyBoundButton(String actionMapKey, int key, int mask) 
    { 
    Action myAction = new AbstractAction() 
    { 
     @Override public void actionPerformed(ActionEvent e) 
     { 
     action(e); 
     } 
    }; 

    setAction(myAction); 

    getInputMap(WHEN_IN_FOCUSED_WINDOW) 
        .put(getKeyStroke(key, mask),actionMapKey); 
    getActionMap().put(      actionMapKey, myAction); 

    } 
} 

電話:

button = new KeyBoundButton("WHATEVER", VK_X, CTRL_DOWN_MASK) 
{ 
    @Override 
    public void action(ActionEvent e) 
    { 
    JOptionPane.showMessageDialog(null,"Ctrl-X was pressed"); 
    } 
}; 

但我沒有線索如何使用鑰匙名稱WHATEVER,無論是智能或其他方式,在程序中的其他地方。

我想知道button.getActionCommand()但它返回null,即使我在類定義中插入此行action(e)後:

setActionCommand(actionMapKey); 

的關鍵是什麼名字的目的是什麼?我是否應該在程序中的某個地方使用它,而不是定義鍵綁定?

+0

爲什麼我們關心問題是否被編輯?只要改變你的問題。你不需要做出更大膽的改變。 –

回答

1

如果您只有一個事件偵聽器,則使用鍵名稱。

一般:

setOnKeyListener(new OnKeyListener(){ 
    void onKeyPressed(KeyEvent k){ 
      if(k.getKey() == KeyEvent.VK_ENTER) 
        //Handle ENTER key 
      if(k.getKey() == KeyEvent.VK_ESCAPE) 
        //Handle ESC key 
    } 
); 

此代碼是從我的記憶寫的,可能不是從Java API的實際對象名稱。

+0

@馬科斯 - 我沒有問我想要什麼。我再次以不同的標題和稍微不同的內容問了這個問題。 – DSlomer64

+0

你問如何使用正確的名字? –

+0

@ Marcos - 我正在尋找的答案的新線程是[這裏](http://stackoverflow.com/questions/30967709/how-do-i-access-the-name-of-the-action-定義 - 在-A-java的鍵結合/ 30967930#30967930) – DSlomer64