Java 将keyEvent应用于方法

Java 将keyEvent应用于方法,java,swing,netbeans,jcombobox,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 '" +

我创建了这个方法:

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并按enter键时,它会显示数据库中硬盘的所有ID..但我希望在键入HDD时显示此ID。我认为这样的方法应该应用keyEvent

public void comboS(java.awt.event.KeyEvent evt)
但是我不知道如何调用这个方法以及在组合框中的位置。请给我一些帮助。谢谢。 像这样

要在组合框上附加标签,首先您的组合框必须是可编辑的

    jComboBox1.setEditable(true);
然后按如下方式连接KeyListener:

    jComboBox1.getEditor().getEditorComponent().addKeyListener(new KeyListener() {
        @Override
        public void keyTyped(KeyEvent e) {
            System.out.println(e.getKeyChar() + " KEY_TYPED DETECTED. \n");
        }
        @Override
        public void keyPressed(KeyEvent e) {
            System.out.println(e.getKeyChar() + " KEY_PRESS DETECTED. \n");
        }
        @Override
        public void keyReleased(KeyEvent e) {
            System.out.println(e.getKeyChar() + " KEY_RELEASE DETECTED. \n");
        }
    });

就这么简单:)

更新

正如@alex2410所指出的那样,最好使用。以下是如何:

    final JTextComponent tc = (JTextComponent) jComboBox1.getEditor().getEditorComponent();
    tc.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void insertUpdate(DocumentEvent e) {
            System.out.println("Combo Value is: " + tc.getText() + " . \n");
        }

        @Override
        public void removeUpdate(DocumentEvent e) {
            System.out.println("Combo Value is: " + tc.getText() + " . \n");
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
            System.out.println("Combo Value is: " + tc.getText() + " . \n");
        }
    });

作为旁注,请坚持在编辑器组件上使用此功能,下面是一个示例:

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

validatehd
validate如果您在
JComboBox
的编辑器中输入了HDD,然后执行一些逻辑(如果是真的)。

Ok然后在调用..JComboBox ActionExecuted或Combobobox任意事件的地方初始化Combo-1后您将连接KeyListener
KeyListener
这是低级实现,而不是需要在编辑器组件上使用
DocumentListener
。如果您是在NetBeans中执行此操作,则将此代码添加到构造函数的
initComponents()之后方法,用
ComboItemName
替换
JCombox1
,但所有这些都是在构造函数中完成的..但是我的应用程序在其中创建了带有拖放功能的组合框..在JSP中解决方案是什么不完全是HDD任何id从数据库HDD用于硬盘MON用于监视器