コントロールキーが押されているかどうかをテストしたいJava関数があります。どうやってやるの?
編集:GUIにswingを使用しています。
「isControlDown()」ブール値を使用します。
public void keyPressed (KeyEvent e)
{
System.out.println(e.isControlDown());
}
上記のコードは、押された唯一のものがコントロール キーである場合にのみ機能します。それらに ctrl があり、他のボタンが (おそらく) 誤って押された場合、キャプチャされません。
ctrl キーだけを正確に確認できます
// Are just the CTRL switches left on
if(evt.getModifiers() == InputEvent.CTRL_MASK) {
System.out.println("just the control key is pressed");
}
押された複数のキーをシミュレートするときは、 or ビット演算子を使用します。左ボタンと ctrl キーの両方を押し続けることをシミュレートするには、これを探します。
// Turn on all leftButton and CTRL switches
int desiredKey = InputEvent.BUTTON1_MASK | InputEvent.CTRL_MASK;
Ctrlキーが押されているかどうかを確認するときに、これを行うことができます
// If we turn off all switches not belonging to CTRL, are all the CTRL switches left on
if((evt.getModifiers() & InputEvent.CTRL_MASK) == InputEvent.CTRL_MASK) {
System.out.println("Control Key is pressed and perhaps other keys as well");
}
左ボタンとCtrlマスクの両方が押されているかどうかも確認できます
// If we turn off all switches not belonging to leftButton or CTRL, are all the leftButton and CTRL switches left on
if((evt.getModifiers() & desiredKey) == desiredKey) {
System.out.println("left button and control keys are pressed and perhaps others as well");
}
これがあるとします:
A | B
このように考えるべきです。A には、多数のスイッチがオンになっているコントロール パネルがあります。Bには、多数のスイッチがオンになっているコントロールパネルもあります。「| B」の仕事は、すべての B のスイッチが確実にオンになるようにするために必要な最小限の作業を行うことです。
これがあるとします:
A & B
「& B」の仕事は、B 以外のスイッチをオフにするために必要な最小限の作業を行うことです。
それはいくつかのことに依存します。
Java プログラムをコンソール プログラム (テキスト ベース) として実行している場合は、受信した文字の適切なビットをテストする必要があります。
それ以外の場合は、 http://docs.oracle.com/javase/6/docs/api/java/awt/event/InputEvent.htmlなど、適切な GUI クラスの InputEvents を確認する必要があります。
このチュートリアルをご覧ください: http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html
私の問題を解決する1つの解決策を見つけました:私はグローバル変数を宣言します
boolean controlStatus=false;
次に、jTextField の keyPressed のイベントで:
if(evt.getKeyCode()==KeyEvent.VK_CONTROL)
controlStatus=true;
keyReleased のイベント:
if(evt.getKeyCode()==KeyEvent.VK_CONTROL)
controlStatus=false;
次に、グローバル変数にアクセスして、コントロール キーが押されているかどうかを確認します。