私はWindowsでスイングでJavaアプリケーションを開発しています。どのようにALTキーを押して私のGUIからフォーカスを取り除くことを避けるために
ALTキーを押した後に次のキーを押しても効果がありません(keyPressedイベントは発生しません)。次のキーを放すだけが認識されます。 CTRLまたはSHIFTの後にALTはまったく効果がありません。 CTRLまたはSHIFTからキーイベントを受信するには、まず別のキーを押すかコンポーネントをクリックする必要があります。
おそらくWindowsは、GUIコンポーネントからフレームのタイトル/メニューに焦点を合わせています。 ALT +私のアプリでグラフィックを移動するにはMouseWheelが必要です。後でCTRL + MouseWheelでグラフィックをズームしたい場合は、これは機能しません。 ALTはフォーカスを取り除くことができません(でも、ALT + Fなどのメニュー項目にアクセスできます)。
私は既にComponent.requestFocus()を試しましたが、実際には私のコンポーネントは実際にフォーカスを失うことはありません。
挙動を示している簡単な例:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
class MyKeyListener implements KeyListener {
public void keyTyped(KeyEvent arg0) {}
public void keyPressed(KeyEvent arg0) {
System.out.println("Key perssed: " + arg0.getKeyCode());
}
public void keyReleased(KeyEvent arg0) {
System.out.println("Key released: " + arg0.getKeyCode());
}
}
public class KeyListenerDemo {
public static void main(String[] a) {
JFrame frame = new JFrame("Keytest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setFocusTraversalKeysEnabled(true);
JTextField textField = new JTextField();
textField.addKeyListener(new MyKeyListener());
frame.add(textField);
frame.setSize(300, 200);
frame.setVisible(true);
}
}
ALTキーのKeyEventsを消費できますか?私はこの問題は、WindowsのALTキーの通常の機能を壊すことになると考えています。 –
いいえ、Windowsを機能的に維持したい - メニューバーにアクセスする。だから実際には、フォーカススイッチを避ける方法ではなく、焦点を取り戻す方法です。 –
解決された種類:Scott、あなたは正しいです。私のケースではconsume()は実際に動作しました。私は機能のためにマウスホイールと一緒にALTを使用することができます。 ALT + F –