キーバインダーの仕組みを学ぶだけで、Javaチュートリアルから誤解されているようです。これはコードです:キーバインドが機能しない、アクションが実行されない
public class KeyBinder {
public static void main(String[] args) {
//making frame and label to update when "g" key is pressed.
JLabel keybinderTestLabel;
JFrame mainFrame = new JFrame();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setSize(300,75);
mainFrame.setLocationRelativeTo(null);
mainFrame.setVisible(true);
keybinderTestLabel = new JLabel("Press the 'g' key to test the key binder.");
mainFrame.add(keybinderTestLabel);
Action gPressed = new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e) {
keybinderTestLabel.setText("Key Binding Successful.");
System.out.println("Key Binding Successful.");
//Testing to see if the key binding was successful.
}
};
keybinderTestLabel.getInputMap().put(KeyStroke.getKeyStroke("g"), "gPressed");
keybinderTestLabel.getActionMap().put("gPressed", gPressed);
/*
* from my understanding, these two lines map the KeyStroke event of the g key
* to the action name "gpressed", then map the action name "gpressed" to the action
* gpressed.
*
*/
}
}
私が理解から、私はアクションgPressed
にそれをマッピングし、その後、アクション名「gPressed」にGキーストロークをマッピングされました。しかし何らかの理由で、プログラムを実行するときにgキーを押してもテキストラベルが更新されません。ここで何が問題なの?実際にキーボードのgキーにマップされていない "g"キーストロークですか?
代わり
KeyStroke.getKeyStroke(KeyEvent.VK_G, 0)
を使用してみてください - 動作しません。 Stringを使用する場合は、 'KeyStroke.getKeyStroke(" G ")'を使用できます。キーボードの "g"を押すための綴じ具を登録する場合。文字列を使用すると、基本的にはKeyEvent.VK _ ???の後にテキストが表示されます。したがって、 'KeyStroke.getKeyStroke(" ENTER ")'を使って "Enter"キーを聞くこともできます。または、理解しやすい文字パラメータを使用することです: 'KeyStroke.getKeyStroke( 'g')'、 – camickrああありがとう!しかし、getKeyStroke(KeyEvent.VK_G、0)では、0パラメータは何をしていますか? – Psear
@Psearモディファイア(シフト/アルト/コントロール) – MadProgrammer