Referencja do obiektu z adnotacją @FXML

0

Zacząłem bawić się JavąFX i mam pewien problem. Mam kilka rozmiarów przechowywanych w modelu jako BooleanProperty, a w widoku jako CheckBoxy. CheckBoxy łączę z odpowiednimi rzeczami (?) z dokumentu .fxml za pomocą Scene Builder'a. Zauważyłem, że nie mogę zrobić tablicy CheckBoxów, np CheckBox sizes[9] (czy coś takiego) i dawać referencję do odpowiedniego elementu w tablicy, tylko trzeba każdy CheckBox osobno. Mimo to, chciałbym mieć rozmiary w jednym miejscu, więc napisałem coś takiego:

	@FXML
	private CheckBox S;
	@FXML
	private CheckBox M;
	@FXML
	private CheckBox L;
	@FXML
	private CheckBox XL;
	@FXML
	private CheckBox XL2;
	@FXML
	private CheckBox XL3;
	@FXML
	private CheckBox XL4;
	@FXML
	private CheckBox XL5;
	@FXML
	private CheckBox XL6;
	
	private CheckBox[] sizeCheckBoxes = {S, M, L, XL, XL2, XL3, XL4, XL5, XL6};

Niestety, wyskakuje NullPointerException przy czymś takim:

sizeCheckBoxes[2].setSelection(true)

Nie ma co się dziwić, CB nie zostały zainicjowane. Jednakże nie mogę ich ręcznie zainicjować, gdyż wtedy to już nie będzie połączony obiekt przez SceneBuildera. To właśnie jest mój problem - jak przechowywać sobie rozmiary "w jednym miejscu" (tablica, lista), żeby np. w jednej pętli zrobić dla nich tę samą czynność, jednocześnie nie tracąc referencji z obiektami/rzeczami (?) utworzonymi przez SceneBuildera?

1

Spróbuj tą tablicę inicjalizować w start(), konstruktorze, init() czy co ty tam masz w tej klasie.

0

Działa, dziękuję bardzo. Przy okazji jeszcze jedno pytanie. Deklarując wcześniej tablicę nie mogłem zrobić czegoś takiego potem w metodzie:
sizeCheckBoxes = {S, M, L, XL, XL2, XL3, XL4, XL5, XL6}; bo tak można tylko na samym początku.

Obszedłem to w ten sposób:
CheckBox[] temp = {S, M, L, XL, XL2, XL3, XL4, XL5, XL6}; sizeCheckBoxes = temp;

Mam pytanie czy jest jakaś metoda, która przyjmuje kilka parametrów Object i tworzy z nich tablicę czy coś takiego?

1

Nie wiem czy dobrze Ciebie zrozumiałem...

new <typ>[] {argumenty inicjalizacji};
sizeCheckBoxes  = new CheckBox[] {S, M, L, XL, XL2, XL3, XL4, XL5, XL6};

Podstawy http://naukajavy.pl/kurs-jezyka-java/76-tworzenie-obiektow

0

Użyj kolekcji zamiast tablic.

0

@K2op - Dokładnie o to mi chodziło. Przy okazji wychodzi ile jest braków w podstawach D:
@Wizzie - akurat w tym wypadku wygodniej było mi użyć tablic, gdyż mała szansa, aby się wielkości zmieniły, ale następnym razem wezmę to pod uwagę :)

Dziękuję bardzo za pomoc.

0

akurat w tym wypadku wygodniej było mi użyć tablic, gdyż mała szansa, aby się wielkości zmieniły, ale następnym razem wezmę to pod uwagę

Ale co jest w tym wygodniejszego? Taka sama robota przy inicjalizacji jak z tablicą, a kolekcje są prawie zawsze znacznie lepszym wyborem z powodów, których nie będę wymieniał, bo możesz sobie łatwo je znaleźć w google (albo Effective Java, polecam). Generalnie używaj kolekcji zamiast tablic kiedy możesz.

Ogólnie IMO jeszcze lepszym rozwiązaniem jest klasa opakowująca te checkboxy, ale jeśli dopiero uczysz się podstaw, to możesz to póki co olać.

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