Jestem trochę nowy w Javie, JavaFX i programowaniu w ogóle, i mam problem, który łamie mój mózg.Jak wypełnić okno listy w JavaFX przy użyciu obiektów niestandardowych?
W większości tutoriali Mam spojrzał dotyczące wypełniania ListView (Używanie ObservableArrayList dokładniej) najprostszym sposobem na to jest, aby go z ObservableList strun, tak jak poniżej:
ObservableList<String> wordsList = FXCollections.observableArrayList("First word","Second word", "Third word", "Etc.");
ListView<String> listViewOfStrings = new ListView<>(wordsList);
Ale nie chcę używać ciągów. Chciałbym użyć obiektu niestandardowego zrobiłem nazwie słowa:
ObservableList<Word> wordsList = FXCollections.observableArrayList();
wordsList.add(new Word("First Word", "Definition of First Word");
wordsList.add(new Word("Second Word", "Definition of Second Word");
wordsList.add(new Word("Third Word", "Definition of Third Word");
ListView<Word> listViewOfWords = new ListView<>(wordsList);
Każdy obiekt Słowo tylko ma 2 własności: wordString (ciąg tego słowa) i definicji (inny ciąg znaków, który jest definicja tego słowa). Mam pobierające i ustawiające dla obu.
Możesz zobaczyć, gdzie to idzie - kod się kompiluje i działa, ale kiedy wyświetlam go w mojej aplikacji, zamiast wyświetlać tytuły każdego słowa w ListView, wyświetla sam obiekt Word jako String!
Image showing my application and its ListView
tutaj moje pytanie jest, w szczególności, czy istnieje prosty sposób przerobić to:
ListView<Word> listViewOfWords = new ListView<>(wordsList);
W taki sposób, że zamiast podejmowania Words bezpośrednio od wordsList, to dostęp do wordString właściwość w każdym słowie mojej obserwowalnej listy kontrolnej?
Dla jasności, to nie jest dla Androida, a lista słów zostanie zmieniona, zapisana i załadowana ostatecznie, więc nie mogę po prostu zrobić kolejnej tablicy, która będzie zawierała słowaStrings. Zrobiłem trochę badań w sieci i wydaje mi się, że istnieje coś, co nazywa się "fabrykami komórek", ale wydaje się niepotrzebnie skomplikowane, co wydaje się być tak prostym problemem i jak już wcześniej wspomniałem, jestem trochę początkujący, jeśli chodzi o programowanie.
Czy ktoś może pomóc? To jest mój pierwszy raz tutaj, więc przepraszam, jeśli nie zawarłem wystarczającej ilości kodu lub zrobiłem coś złego.
Bardzo dziękuję za bardzo szczegółową odpowiedź! Na razie zamierzam spróbować przesłonić metodę toString(), ale zamierzam zrobić jeszcze więcej czytania na temat fabryk komórek, aby lepiej je zrozumieć, a następnie zmodyfikować aplikację tak, aby używała ich zgodnie z sugestią. Będę tylko modyfikował "definicję" poszczególnych słów za pomocą tego przycisku edycji, a widok listy śledzi tylko właściwość "słowo", więc nie musi śledzić zmian w "definicji". –