2017-04-13 22 views
1

私は、入力フィールドに正規表現のチェックがあります。入力がそうでない場合、タブを押して確認し、通常は次のフィールドに移動します。要素は、現在のフィールドにとどまる必要があります。しかし、通常のタブポリシーのため、次の要素に移動し、現在の要素にフォーカスを要求しても、次の要素に移動します。Java - requestFocus現在の要素

事前に助け:)これは私のコードスニペットで

してくれてありがとう:

}else if(comp.getName().equals("input_dauer")){ 
    System.out.println("Test3"); 
    final Pattern pattern = Pattern.compile("^[\\d]{0,}[,.]+[\\d]{1,3}$"); 
    if (!pattern.matcher(input_dauer.getText()).matches()) { 
     lblDauer.setForeground(Color.red); 
     MandatoryDauer = 0; 
     comboBox_aktivitaet.requestFocus(); 
     input_dauer.requestFocus(); 

    } 
    else{ 
    lblDauer.setForeground(Color.decode("#1E2F3F")); 
    MandatoryDauer = 1; 
    textArea_beschreibung.requestFocus(); 
    } 

答えて

0

あなたはJTextFieldのフォーカストラバーサルキーを無効にすること(あるいはあなたのComponentがあるものは何でも)とsetFocusTraversalKeysEnabled(false)、および手動必要に応じてフォーカスを移動します。

次の例では、テキストの長さが5文字未満の場合、フォーカスが転送されないように無効とみなされます。

有効な場合(長さ= 5)、論理フォーカスの順序を保持する場合はtransferFocus()、特定のコンポーネントに転送する場合はrequestFocus()を使用してフォーカスを転送します。

フォーカス動作を見ることができるようにダミーボタンが追加されました。

JPanel contentPane = new JPanel(); 
JFrame fr = new JFrame(); 
JButton someButton = new JButton("Button"); 
JTextField textField = new JTextField(10); 
textField.setFocusTraversalKeysEnabled(false); 
textField.addKeyListener(new KeyAdapter() { 

    @Override 
    public void keyPressed(final KeyEvent ke) { 

     JTextField source = (JTextField) ke.getSource(); 

     if (ke.getKeyCode() == KeyEvent.VK_TAB) { 

      if (source.getText().length() >= 5) { 

       System.out.println("Tab with valid text, transferring focus"); 

       source.transferFocus();// or someButton.requestFocus() 

      } else { 

       System.out.println("Tab with invalid text"); 
      } 

     } 

    } 

}); 


contentPane.add(textField); 
contentPane.add(someButton); 
fr.setContentPane(contentPane); 

fr.pack(); 
fr.setVisible(true); 
関連する問題