2017-08-01 5 views
0

数字以外のすべての入力を許可するjComoBoxを作成しようとしています。しかし、私はjComoBoxでそれを試しているとき、それは動作していません。jComoBox入力のみの文字(数字なし)

私はjTextFiled(しかしoppsite-なしの数字)で正常にそれをやった:i_borowため

コードTimeKeyTypedのイベントがjTextFiled:私はjComoBoxに同じことをしようとした

private void i_borowTimeKeyTyped(java.awt.event.KeyEvent evt) {          
    char c = evt.getKeyChar(); 
    if(!(Character.isDigit(c) || c == KeyEvent.VK_BACK_SPACE || c == KeyEvent.VK_DELETE)) { 
     evt.consume(); 
     l_msg2.setForeground(Color.red); 
    } else { 
     l_msg2.setForeground(Color.black); 
    } 
} 

(c_title) :

private void c_titleKeyTyped(java.awt.event.KeyEvent evt) {         
    System.out.println("ssss"); 
    char c = evt.getKeyChar(); 
    System.out.println(c); 
    if(Character.isDigit(c)){ 
     evt.consume(); 
     l_noNum.setForeground(Color.red); 
    } else { 
     l_noNum.setForeground(Color.black); 
    } 
} 

コードが機能しません。 さらに、それは "ssss"文字列を表示していません。 なぜjComboBoxで動作しないのですか?ありがとう。

答えて

3

ここでは、コンボボックスに必要な小切手の提供方法の例を示します。同じアプローチをテキストフィールドに使用することもできます(リスナーを使用するよりも優れています)。このアプローチは、ユーザーがテキストをコンボボックスにペーストするときにも機能します。

import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.WindowConstants; 
import javax.swing.plaf.basic.BasicComboBoxEditor; 
import javax.swing.text.AbstractDocument; 
import javax.swing.text.AttributeSet; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.DocumentFilter; 

public class FilterTryout { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame frm = new JFrame("Combo test"); 
       JComboBox<String> combo = new JComboBox<>(new String[] {"One", "Two", "Three"}); 
       combo.setEditor(new ComboEditor()); 
       combo.setEditable(true); 
       frm.add(combo); 
       frm.pack(); 
       frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
       frm.setLocationRelativeTo(null); 
       frm.setVisible(true); 
      } 
     }); 
    } 

    private static class ComboEditor extends BasicComboBoxEditor { 
     @Override 
     protected JTextField createEditorComponent() { 
      JTextField fld = super.createEditorComponent(); 
      ((AbstractDocument) fld.getDocument()).setDocumentFilter(new NoDigitsFilter()); 
      return fld; 
     } 
    } 

    private static class NoDigitsFilter extends DocumentFilter { 
     @Override 
     public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { 
      if (isNoDigits(string)) { 
       super.insertString(fb, offset, string, attr); 
      } 
     } 

     @Override 
     public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { 
      if (isNoDigits(text)) { 
       super.replace(fb, offset, length, text, attrs); 
      } 
     } 

     private boolean isNoDigits(String text) { 
      boolean noDigits = true; 
      for (int i = 0; i < text.length() && noDigits; i++) { 
       noDigits = !Character.isDigit(text.charAt(i)); 
      } 
      return noDigits; 
     } 
    } 
} 
+0

ありがとうございます。しかし、エラーがあります:スレッド "AWT-EventQueue-0"の例外java.lang.IllegalArgumentException:不良位置:1 –

+0

@DocLeviうまく動作します。この例外をどのように再現できますか? –

+0

私は:AutoCompleteDecorator.decorate(JComboBox)も使用しています。それが原因だろうか? –

関連する問題