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, botów: 0