Witam.
Mam bardzo duży problem z którym nie potrafię sobie poradzić więc proszę o pomoc.
Mam klasę Wyborca:
package wybory.rs.jpa;
import java.sql.Timestamp;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "Wyborcy")
public class Wyborca {
@Id
@GeneratedValue
private int id;
private String imie;
private String nazwisko;
private String nazwisko2;
private String pesel;
private String miejscowosc;
private String ulica;
private String nr_domu;
private String nr_lokalu;
private Timestamp data_glosowania;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getImie() {
return imie;
}
public String getNazwisko2() {
return nazwisko2;
}
public void setNazwisko2(String nazwisko2) {
this.nazwisko2 = nazwisko2;
}
public String getMiejscowosc() {
return miejscowosc;
}
public void setMiejscowosc(String miejscowosc) {
this.miejscowosc = miejscowosc;
}
public void setImie(String imie) {
this.imie = imie;
}
public String getNazwisko() {
return nazwisko;
}
public void setNazwisko(String nazwisko) {
this.nazwisko = nazwisko;
}
public String getPesel() {
return pesel;
}
public void setPesel(String pesel) {
this.pesel = pesel;
}
public String getUlica() {
return ulica;
}
public void setUlica(String ulica) {
this.ulica = ulica;
}
public String getNr_domu() {
return nr_domu;
}
public void setNr_domu(String nr_domu) {
this.nr_domu = nr_domu;
}
public String getNr_lokalu() {
return nr_lokalu;
}
public void setNr_lokalu(String nr_lokalu) {
this.nr_lokalu = nr_lokalu;
}
public Timestamp getData_glosowania() {
return data_glosowania;
}
public void setData_glosowania(Timestamp data_glosowania) {
this.data_glosowania = data_glosowania;
}
}
i teraz w programie mam TextEdit o nazwie szukaj oraz tabele (tbview)
Kiedy wpisuje np: poszczególne numery PESEL tabela mi się odświeża zwracając listę rekordów które pasują do wprowadzonego tekstu.
Niestety problem polega na tym że jak przy pierwszym uruchomieniu wczytuje mi do tej tabeli wszystkie rekordy, tak potem przy podaniu już pierwszej litery wyszukiwania pojawiaja się tylko rekordy których PESEL pasuję oraz maja podaną datę głosowania niestety nie pokazują się te rekordy które mają datę głosowania ustawioną na null;
Nie mam pojęcia dlaczego tak jest. Nigdzie nie sprawdzam czy data jest null;
A oto moje metody które za to wyszukiwanie odpowiadają ( wzorowałem się przykładem który znalazłem w sieci)
Metoda głowna
public GUI() {
EntityManagerFactory EntityManagerFactory = Persistence
.createEntityManagerFactory("wyboryDB");
EntityManager entityManager = EntityManagerFactory
.createEntityManager();
TypedQuery<Wyborca> query = entityManager.createQuery(
"select w from Wyborca w", Wyborca.class);
data = FXCollections.<Wyborca> observableArrayList(query
.getResultList());
filteredData.addAll(data);
data.addListener(new ListChangeListener<Wyborca>() {
@Override
public void onChanged(
ListChangeListener.Change<? extends Wyborca> change) {
updateFilteredData();
}
});
entityManager.clear();
EntityManagerFactory.close();
}
Metoda updateFilteredData();
private void updateFilteredData() {
// TODO Auto-generated method stub
filteredData.clear();
for (Wyborca w : data) {
System.out.println(data.size());
if (matchesFilter(w)) {
filteredData.add(w);
}
}
reapplyTableSortOrder();
}
Metoda porównania znaków matchesFilter
private boolean matchesFilter(Wyborca w) {
// TODO Auto-generated method stub
String filterString = Szukaj.getText();
if (filterString == null || filterString.isEmpty()) {
return true;
}
String lowerCaseFilterString = filterString.toLowerCase();
if (w.getPesel().toLowerCase().indexOf(lowerCaseFilterString) != -1) {
return true;
}
return false;
}
I ostatnia metoda ale chyba mało ważna
// TODO Auto-generated method stub
ArrayList<TableColumn<Wyborca, ?>> sortOrder = new ArrayList<>(
tbView.getSortOrder());
tbView.getSortOrder().clear();
tbView.getSortOrder().addAll(sortOrder);
}
Wydaję mi się że problem jest w metodzie updateFilteredData() nie wiem czemu pętla
for (Wyborca w : data)
bierze pod uwagę tylko te rekordy w które mają ustawioną datę
Oczywiście zmienne data i filteredData to ObservableList<Wyborca>
Bardzo proszę o pomoc bo męczę się z tym już bardzo długo i nie mam pojęcia co robię źle.
Pozdrawiam