jComoBox只输入字符(无数字)

我正在尝试制作一个允许除数字之外的所有输入的jComoBox。 但是,当我尝试使用jComoBox时,它无法正常工作。

我用jTextFiled成功完成了它(但是对象 – 没有数字):

i_borow jTextFiled的TimeKeyTyped事件代码:

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); } } 

我试着对jComoBox(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上运行? 谢谢。

以下是如何提供combobox所需的检查的示例。 您也可以使用相同的方法处理文本字段(它比使用侦听器更好)。 当用户将文本粘贴到combobox中时,此方法也适用。

 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 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; } } }