java - 将 keyEvent 应用于方法

标签 java swing netbeans jcombobox keyevent

我创建了这个方法:

public void comboS() {

    ResultSet rset = null;
    String sch = ((JTextField) ComboItemName.getEditor().getEditorComponent()).getText();
    try {
        rset = new JDBC.DB().getData("SELECT * FROM item_reg WHERE id LIKE '" + sch + "%';");
    } catch (Exception e) {
        System.out.println(e);
    }
    ComboItemName.removeAllItems();
    try {
        while (rset.next()) {
            String item = rset.getString("id");
            ComboItemName.addItem(item);
        }
    } catch (SQLException ex) {
        Logger.getLogger(jfilechooser.class.getName()).log(Level.SEVERE, null, ex);
    }
    System.out.println(sch);
    ComboItemName.setSelectedItem(null);
    ComboItemName.setPopupVisible(true);
    ((JTextField) ComboItemName.getEditor().getEditorComponent()).setText(sch);

}

我在 JComboBox(ComboItemName) 的 actionPerformed 中调用此方法。当我键入 HDD 并按回车键时,它会显示数据库中所有硬盘的 ID。但我希望在我键入 HDD 时显示它。我认为为此,应该将 keyEvent 应用于这样的方法。

public void comboS(java.awt.event.KeyEvent evt)

但我不知道如何调用此方法以及在组合框中的位置。请为此提供一些帮助。谢谢。 像这样

enter image description here

最佳答案

使用DocumentListener为此,在您的编辑器组件上,这里有一个例子:

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.JTextComponent;

public class Example extends JFrame {


    public Example() {
        JComboBox comboBox = new JComboBox(new String[]{"1","2"});
        comboBox.setEditable(true);
        ((JTextComponent)comboBox.getEditor().getEditorComponent()).getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void removeUpdate(DocumentEvent arg0) {
                validateHDD(arg0);
            }

            @Override
            public void insertUpdate(DocumentEvent arg0) {
                validateHDD(arg0);
            }

            @Override
            public void changedUpdate(DocumentEvent arg0) {
                validateHDD(arg0);
            }

            private void validateHDD(DocumentEvent arg0) {
                try {
                    String text = arg0.getDocument().getText(0, arg0.getDocument().getLength());
                    if(text.equals("HDD")){
                        System.out.println("HDD entered");
                        //call your method here
                    }
                } catch (BadLocationException e) {
                    e.printStackTrace();
                }
            }

        });
        add(comboBox);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Example frame = new Example();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

validateHDD 验证你是否在JComboBox的编辑器中输入了HDD,如果为真则执行一些逻辑。

关于java - 将 keyEvent 应用于方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20488876/

相关文章:

opengl - 尝试构建简单的 OpenGL 程序时出现链接错误

java - 获取 JFrame 中 JTextField 的坐标

java - EditText 上的 FloatingActionButton 不可点击

java - Infinispan 命名缓存过期

java - 有什么方法可以屏蔽运行时进入 jText 区域的值

Java GUI 登录屏幕

java - 需要保持一些列可编辑和不可编辑,并且只允许双击单元格进行单元格编辑

java - "This feature is not yet enabled. Press Next to activate it.",但按 "Next"不会激活它。在网 bean 中

c++ - C++中的两层代码调试

java - JDBC 选择列