如何创建一个只接受字母长度为3的组合框? 我创建了一个自动完成组合框,将editable设置为true。 现在我想让用户只输入长度为3的字母到组合框的输入字段。有什么想法吗?
我将此文档过滤器添加到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);
}
}
}
如果我在组合框中输入值,它会起作用。但是当我选择项目时,它没有显示在组合框中,因为过滤器提示允许它。
例如,如果我在组合框编辑器中输入EUR,则可以。但如果我从项目中选择EUR它不起作用意味着过滤器不允许它在编辑器中显示。
我错过了什么吗?
答案 0 :(得分:2)
您需要访问组合框的编辑器,以便过滤字符。组合框的默认编辑器是文本字段。您可以使用以下方式访问文本字段:
ComboBoxEditor editor = comboBox.getEditor();
JTextField textField = (JTextField)editor.getEditorComponent();
过滤字符的最佳方法是在文本字段的DocumentFilter
上使用Document
。阅读Implementing a DocumentFilter上的Swing教程中的部分。本教程包含一个工作过滤器,用于限制可输入的字符数。
您需要修改过滤器以仅允许使用字母字符。请注意,您需要修改replace()
和insertString()
方法,因为这些方法中的任何一种都可能用于向Document
添加文字。
编辑:
阅读How to Use Combo Boxes上的Swing教程中的部分。有一个使用可编辑组合框的示例。请注意该部分中的评论:
当用户从菜单中选择项目并且用户键入Enter时,可编辑的组合框会触发操作事件。请注意,当用户在组合框中输入值时,菜单保持不变。如果需要,您可以轻松编写一个动作侦听器,每次用户键入唯一值时,都会在组合框的菜单中添加新项目。