沿着一個jTable我有一系列的文本和組合框。我使用框中的輸入來過濾jTable上顯示的JPQL查詢的結果。現在,我們的想法是自動化該過程,以便每當用戶在框中鍵入一個字符時,應用程序會自動發送查詢並使用過濾的結果更新jTable。我試圖做這樣的:keyPressed監聽器產生奇怪的行爲
public class MyKeyListener extends KeyAdapter{
public void keyPressed(KeyEvent evt){
setFilters();
displayResults(); }}
setFilters()和displayResults()是分別設定的參數和查詢,並得到ResultList和更新JTable中的方法。然後,我將keyPressed添加到所有相關的文本框,以及一些用於調試的System.out.println行。接下來會發生什麼:當我輸入第一個字符時什麼也沒有發生。如果我輸入第二個字符,則KeyListener將運行併發送查詢,但僅使用第二個字符進行過濾,第一個字符將被忽略。這是我的第一個怪誕。第二個是,看着我的控制檯,我意識到查詢是每個成功的Key Listened發送6次。幫助將不勝感激。第二個想法,我也插入我的setFilters()和displayResults()。
private void setFilters() {
//Auslesen der gesetzten Filter
String name=jName.getText()+"%";
String vorname= jVorname.getText()+"%";
String vvname= jVName.getText()+"%";
String vvorname=jVVorname.getText()+"%";
String mname=jMName.getText()+"%";
String strasse=jAdresse.getText()+"%";
String plz=jPlz.getText()+"%";
String ort=jOrt.getText()+"%";
String gruppe=jGruppe.getText()+"%";
String geschlecht=(String) jGeschlecht.getSelectedItem()+"%";
String mvorname=jMVorname.getText()+"%";
String firma=jFirma.getText()+"%";
//Die Query
kinderQuery = java.beans.Beans.isDesignTime() ? null : rcwPUEntityManager.createQuery("SELECT k FROM Kinder k "
+ "INNER JOIN k.vaeter vat "
+ "INNER JOIN k.muetter mut "
+ "INNER JOIN k.gruppen gru "
+ "INNER JOIN k.firmen fir "
+ "WHERE k.kindName LIKE :name "
+ "AND k.kindVorname LIKE :vorname "
+ "AND vat.vaterName LIKE :vname "
+ "AND vat.vaterVorname LIKE :vvorname "
+ "AND mut.mutterName LIKE :mname "
+ "AND mut.mutterVorname LIKE :mvorname "
+ "AND k.kindStrasse LIKE :strasse "
+ "AND k.kindPLZ LIKE :plz "
+ "AND k.kindOrt LIKE :ort "
+ "AND gru.gruppeName LIKE :gruppe "
+ "AND k.kindGeschlecht LIKE :geschlecht "
+ "AND fir.firmaName LIKE :firma ");
//Einsetzen der ausgelesenen Strings in die JPQL-Query Parameter
kinderQuery.setParameter("name", name);
kinderQuery.setParameter("vorname", vorname);
kinderQuery.setParameter("vname", vvname);
kinderQuery.setParameter("vvorname", vvorname);
kinderQuery.setParameter("mname", mname);
kinderQuery.setParameter("mvorname", mvorname);
kinderQuery.setParameter("strasse", strasse);
kinderQuery.setParameter("plz", plz);
kinderQuery.setParameter("ort", ort);
kinderQuery.setParameter("gruppe", gruppe);
kinderQuery.setParameter("geschlecht", geschlecht);
kinderQuery.setParameter("firma", firma);
}
private void displayResults(){
java.util.Collection data = kinderQuery.getResultList();
System.out.println(data);
kinderList.clear();
kinderList.addAll(data);
jTable1.repaint();
}
在此先感謝!
謝謝你們兩位的回答。我承認從未使用過DocumentListener,我將通讀它。 –