JCombobox只接受字母表

如何创建一个只接受字母长度为3的combobox? 我创建了一个自动完成combobox,将editable设置为true。 现在我想让用户只输入长度为3的字母到combobox的输入字段。 有什么想法吗?

我将此文档filter添加到Jcombobox的文本字段中。

class AlphaDocumentFilter extends DocumentFilter { private final static Pattern CHARACTERS = Pattern.compile("[a-zA-Z]"); public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException { if (text != null && CHARACTERS.matcher(text).matches() && (fb.getDocument().getLength() + text.length()) <= 3){ fb.insertString(offset, text.toUpperCase(), attr); } } public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { if (text != null && CHARACTERS.matcher(text).matches() && (fb.getDocument().getLength() + text.length() - length) <= 3){ fb.replace(offset, length, text.toUpperCase(), attrs); } } } 

如果我在combobox中输入值,它会起作用。 但是当我选择项目时,它没有显示在combobox中,因为filter提示允许它。

例如,如果我在combobox编辑器中输入EUR,则可以。 但如果我从项目中选择EUR它不起作用意味着filter不允许它在编辑器中显示。

我错过了什么吗?

您需要访问combobox的编辑器,以便过滤字符。 combobox的默认编辑器是文本字段。 您可以使用以下方法访问文本字段:

 ComboBoxEditor editor = comboBox.getEditor(); JTextField textField = (JTextField)editor.getEditorComponent(); 

过滤字符的最佳方法是在文本字段的DocumentFilter上使用Document 。 阅读有关实现DocumentFilter的Swing教程中的部分。 本教程包含一个工作filter,用于限制可输入的字符数。

您需要修改filter以仅允许使用字母字符。 请注意,您需要修改replace()insertString()方法,因为这些方法中的任何一个都可能用于向Document添加文本。

编辑:

阅读Swing教程中有关如何使用combobox的部分 。 有一个使用可编辑combobox的示例。 请注意该部分中的注释:

当用户从菜单中选择项目并且用户键入Enter时,可编辑的combobox将触发操作事件。 请注意,当用户在combobox中输入值时,菜单保持不变。 如果需要,您可以轻松编写一个动作侦听器,每次用户键入唯一值时,都会在combobox的菜单中添加新项。