2016-11-24 1 views
1

Я пытаюсь разработать автоматическое предложение Textfield. Когда я печатаю в текстовом поле является задержка один ключом и предложить один ключ поздно **Как исправить один keyPressed задерживается в java swing?

Когда я печатаю ааа он запрашивает как «аа» только и предлагаю в соответствии с этим в list.When я нажатием любой клавиши после ааа (дополнительное нажатие), то он будет, как ааа-опрос

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

Просто используйте 'keyReleased' INSTEAD из' keyPressed'. – Berger

ответ

0

использование keyReleased вместо keyPressed метод KeyAdapter класса.

+0

thank you.it работает , когда я очистил текстовое поле, он все равно покажет мне заполненный список. – Nilay

+0

Это потому, что событие keyPressed будет вызываться, когда вы нажимаете backspace, чтобы очистить текстовое поле, а также нет никакой логики для удаления элемента из списка. Я бы предложил добавить логику удаления в нажатие клавиши backspace. что-то вроде: public void keyPressed (KeyEvent arg0) { if (arg0.getKeyCode() == KeyEvent.VK_BACK_SPACE) { // удалить элемент из списка; – vvtx

+0

спасибо, я решил это, проверив текстовое поле пустым или нет. – Nilay

Смежные вопросы