Jak w ListView przechowywać cały obiekt, a wyświetlać tylko niektóre dane?

0
		ObservableList<Customer> listOfCustomers = FXCollections
				.observableArrayList(dbCustomer.getAllCustomers());
		listViewCustomers.setItems(listOfCustomers);
		  
        //listViewCustomers.setCellFactory(listOfCustomers, );
 

to.png

Chcę wyświetlić tylko imię i nazwisko, ale gdy użyje metody getItem z listView to chce, żeby zwróciła cały obiekt customer i mieć dostęp do wszystkich jego pól. W C#/WindowsForms takie coś było możliwe, a czy tutaj jest i jak to zrobić?

0

zaimplementuj toString?

0

Zaimplementowanie toString nic nie da, bo w innej liście będziesz potrzebować czegoś innego. Napisz sobie małą klasę, która będzie wyglądać mniej więcej tak:

class CustomerPicture{
    private final Customer customer;

    public CustomerPicture(Customer customer){
         tis.customer = customer;
    }

    public String toString(){
    // i tu implementujesz wyświetlanie.
    }

}

Mała rzecz, a cieszy. W dodatku można to dać w klasie gdzie dodajesz zawartość do listView i nie wypłynie to do głównego kodu.

1

Masz już tam prawie prawidłowy kawałek kodu, tyle że zakomentowany. Najprościej będzie ustawić na tej klasie odpowiedni CellFactory. W Twoim przypadku wystarczy prawodpowodnibe coś w tym rodzaju TextFieldListCell.forListView(converter) gdzie converter to instancja klasy StringConverter<Customer>

0

@airborn wielkie dzięki działa.

				.observableArrayList(dbCustomer.getAllCustomers());
		listViewCustomers.setItems(listOfCustomers);
		StringConverter<Customer> sc = new StringConverter<Customer>() {

			@Override
			public String toString(Customer customer) {
				// TODO Auto-generated method stub
				return customer.getName() + " " + customer.getLastName();
			}

			@Override
			public Customer fromString(String string) {
				// TODO Auto-generated method stub
				return null;
			}
		};
		listViewCustomers.setCellFactory(TextFieldListCell.forListView(sc));
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1