2015-05-13 63 views
1

我有這個窗口有幾個TextFields和一個TableView。每次我在TextFields中寫入時,我都會創建一個搜索引擎,它將顯示一個給定對象的新數組,該數組適合我在TextFields中編寫的任何內容。現在,我測試了它,並且我知道搜索引擎的工作原理。但是當我嘗試更新TableView時會出現問題。我試圖按照自己的方式工作,但我能想到的唯一解決方法是每次在TextField中輸入某個內容時刷新整個窗口。但這顯然不是一件好事。更新TableView而不刷新窗口?

所以我的問題是:你知道如何刷新ListView中的列表,而不刷新整個窗口?還有什麼我可以用來直觀顯示例如「Person」對象,使它們可點擊並保存指向給定對象的指針?

請帶上您的任何意見,我會很樂意嘗試或討論您的意見!

+0

使用fireTableCellUpdated(行,列);爲了更新單個單元格的值,或者fireTableRowsUpdated(int firstRow,int lastRow);一行或多行。 –

+0

我不確定這是我在找什麼。假設我有一個顯示100萬個Person對象的數組。然後我在一個TextField中輸入其他東西,然後我的搜索方法返回一個包含一百萬個對象的數組。有沒有一種有效的方式來顯示這個?出於某種原因setItems(Observablelist ol);導致問題。 – Adrian

+0

默認情況下,AbstractTableModel是高效的。即使在ResultSet中有幾百萬行時,屏幕上一次最多也不會超過100行。試一試。 –

回答

1

發現問題!

setItems();似乎調用object.equals();

我在@ever(@)的@Override中犯了一個錯誤。

@Override 
public boolean equals(Object obj) { 
    return this.birthNo.equals(((Person) obj).getBirthNo()); 
} 

更正這:

@Override 
public boolean equals(Object obj) { 
    return obj != null && this.birthNo.equals(((Person) obj).getBirthNo()); 
}