2016-11-24 25 views
1

我想開發自動建議Textfield。當我在文本字段我打字這是一個延時鍵和提示一個鍵晚**如何解決一個keyPressed在java swing中延遲?

當我按在list.When我打字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); 

} 
+0

使用'keyReleased'? – Berger

+0

我應該在keyReleased中寫什麼? @Berger – Nilay

+0

只需使用'keyPressed'的'keyReleased' INSTEAD。 – Berger

回答

0

使用keyReleased,而不是KeyAdapter類的keyPressed方法的任意鍵(額外的按鍵)。

+0

謝謝你的工作。 。當我清除textfield它仍然會顯示我填充列表。 – Nilay

+0

這是因爲按下退格鍵清除文本框時將調用keyPressed事件,再加上沒有從列表中刪除項目的邏輯。我會建議在退格按鍵上添加刪除邏輯。如下所示: public void keyPressed(KeyEvent arg0)if(arg0.getKeyCode()== KeyEvent.VK_BACK_SPACE)//從列表中刪除項目; – vvtx

+0

謝謝,我通過檢查textfield是否爲空來解決它。 – Nilay