【问题标题】:Can not write editable JComboBox无法编写可编辑的 JComboBox
【发布时间】:2015-12-19 14:06:16
【问题描述】:

我正在使用可编辑的 JComboBox 对数据库进行搜索,但在写作方面,只接受给我写一个字母和任意数量的数字,我该怎么做才能让我写字母和数字?

以下代码只接受数字、退格键、回车键,不接受字母。

comboBusqueda.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {

    public void keyPressed(KeyEvent evt) {

        String cadenaEscrita = comboBusqueda.getEditor().getItem().toString();

        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
           if(comparar(cadenaEscrita)){
               buscar(cadenaEscrita);
           }else{
                buscar(comboBusqueda.getSelectedItem().toString());
                comboBusqueda.getSelectedItem();

            }
        }
        if (evt.getKeyCode() >= 65 && evt.getKeyCode() <= 90 
                || evt.getKeyCode() >= 96 && evt.getKeyCode() <= 105 
                || evt.getKeyCode() == 8
                || evt.getKeyCode() == KeyEvent.VK_ENTER
                ) {
            comboBusqueda.setModel(dc.getLista(cadenaEscrita));
            if (comboBusqueda.getItemCount() > 0) {
                comboBusqueda.getEditor().setItem(cadenaEscrita);
                comboBusqueda.showPopup();                     

            } else {
                comboBusqueda.addItem(cadenaEscrita);
            }
        }
    }
});

【问题讨论】:

  • (1) 不要拒绝退格和回车等特定键,只拒绝内容。 (2) 不要使用显式的int 值作为键码,而是使用常量。 (3) 您需要编写一个自定义的ComboBoxEditor 来进行内容检查并将其设置为您的组合框的编辑器。

标签: java jcombobox


【解决方案1】:

这是一个JComboBox,它只允许用户输入(英文)字母和数字以及_ 字符:

public class ComboBoxExample extends JPanel {

    ComboBoxExample() {

        JComboBox<String> cb = new JComboBox<>();
        cb.setEditable(true);
        cb.setEditor(new FilterCBEditor());
        add(cb);
    }

    class FilterCBEditor extends BasicComboBoxEditor {

        FilterCBEditor() {

            ((AbstractDocument) editor.getDocument()).setDocumentFilter(new DocumentFilter() {

                @Override
                public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {

                    if (string.matches("\\w+"))
                        super.insertString(fb, offset, string, attr);
                }

                @Override
                public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {

                    if (text.matches("\\w+"))
                        super.replace(fb, offset, length, text, attrs);
                }
            });
        }
    }
}

这个想法是为组合框设置一个新的编辑器,并在其文本字段中添加一个文档过滤器。

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2012-01-16
    • 2013-03-10
    • 1970-01-01
    相关资源
    最近更新 更多