如何修复java swing中的一个keyPressed延迟?

时间:2016-11-24 09:30:52

标签: java swing textfield jlist autosuggest

我正在尝试开发自动建议Textfield。当我在Textfield中输入时,它会延迟一个键并建议一个键迟到**

  

当我输入aaa时,它仅查询为“aa”并根据列表中的内容进行建议。当我按aaa(额外按键)后按任意键时,它将查询为aaa

private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JPanel panel = new JPanel();
    panel.setBounds(10, 11, 414, 239);
    frame.getContentPane().add(panel);
    panel.setLayout(null);

    textField = new JTextField();
    textField.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent arg0) {

            try {

                addListItem();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
    textField.setBounds(71, 24, 86, 20);
    panel.add(textField);
    textField.setColumns(10);

    list = new JList<String>();

    list.setBounds(71, 55, 86, 97);
    list.setVisible(false);
    list.getScrollableTracksViewportHeight();

    panel.add(list);
}

public void addListItem() throws Exception {

    list.setVisible(true);

    Class.forName("com.mysql.jdbc.Driver");
    c = DriverManager.getConnection("jdbc:mysql://localhost:3306/studentdemo", "root", "root");
    ps = c.prepareStatement(
            "SELECT stud_name FROM student_info where stud_name like '" + textField.getText().trim() + "%' ");
    ResultSet s = ps.executeQuery();

    model = new DefaultListModel<String>();
    while (s.next()) {
        model.addElement(s.getString("stud_name"));
        System.out.println(s.getString("stud_name"));

    }
    list.setModel(model);

}

1 个答案:

答案 0 :(得分:0)

使用keyReleased代替keyPressed类的KeyAdapter方法。