2009-05-15 3 views
7

私は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); 
} 
} 
+2

ALTキーのKeyEventsを消費できますか?私はこの問題は、WindowsのALTキーの通常の機能を壊すことになると考えています。 –

+0

いいえ、Windowsを機能的に維持したい - メニューバーにアクセスする。だから実際には、フォーカススイッチを避ける方法ではなく、焦点を取り戻す方法です。 –

+0

解決された種類:Scott、あなたは正しいです。私のケースではconsume()は実際に動作しました。私は機能のためにマウスホイールと一緒にALTを使用することができます。 ALT + F –

答えて

5

次が働いた私の場合は:それはそれを元によりデフォルトの方法で処理されないようにKeyEvent.consume()

は、このイベントを消費します。

これは、私のフォーカスを盗むことからWindowsを停止しますが、ALTを使用してキーボードニーモニックで私のmenuitemsにアクセスできます。

コメントをいただきありがとうございます。

0

私はそれが、少なくともないスイングでは、可能ではないと思います。これまでに使用したすべてのスイングアプリケーションに同じ問題がありました。それは私がNetbeans IDEを使ってあきらめた主な理由の1つですが、IDEはとても良いです。 SWTアプリケーションにはそのような問題はありません。

+0

私はすでにその答えを得るのを恐れていました;(キーフォーカスを再度得るための回避策はありませんか? –

+0

私が知っているわけではありません。 – Marko

関連する問題