• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed JavaFX Zmiana nazwy przycisku po kliknięciu.

Object Storage Arubacloud
0 głosów
686 wizyt
pytanie zadane 10 sierpnia 2018 w Java przez DanielKowalskiX Początkujący (460 p.)
zamknięte 11 sierpnia 2018 przez DanielKowalskiX

Szukam rozwiązania od kilku ładnych godzin i nie mogę ruszyć z miejsca.
Rozwiązanie mojego problemu pewnie jest banalne, jednak próbowałem ugryźć go już z kilku różnych stron i zdało się to na nic.

Stworzyłem planszę, na której mam ustawionych kilkadziesiąt przycisków (korzystając ze Scene Buildera).
Jak zrobić, by klikając na przycisk zmieniała się jego nazwa?


Rozumiem, że dodając:
public Button button1;
public Button button2;
public Button button3;
.....

public void klikniecie(){
button1.setText("Nowy tekst");
}


Jednak tym sposobem musiałbym tworzyć osobną funkcję dla każdego przycisku, a jednak szukam sposobu, żeby pobrać w jakiś sposób ID klikniętego przycisku i wtedy na nim operować.
Jakieś sugestie?

komentarz zamknięcia: Rozwiązano problem

1 odpowiedź

+1 głos
odpowiedź 10 sierpnia 2018 przez mbabane Szeryf (79,280 p.)
wybrane 11 sierpnia 2018 przez DanielKowalskiX
 
Najlepsza

Istnieje taki komponent jak ButtonBar, który posiada metodę getButtons() zwracającą listę typów Node, można to wykorzystać np. tak:

 buttonBar.getButtons().forEach(node -> ( (Button) node ).setText("Tekst"));

Niestety trzeba robić rzutowanie, więc nie różni się to niczym szczególnym od np. umieszczenia Buttonów w Hboxie i zrobieniu właściwie tego samego:

hBox.getChildren().forEach(node -> ((Button) node).setText("tekst"));

Co ciekawe ButtonBar pozwala na przechowywanie w sobie np. Labela, ale swoją nazwą może dawać dla programistów dodatkową semantykę, czego nie można powiedzieć o HBox. HBoxy itp. mogą przechowywać w sobie różne komponenty i ktoś kto zobaczy HBoxa pomyśli że można wsadzić tam co się chce i wtedy rzutowanie z drugiego przykładu może zgłosić błąd. A widząc ButtonBar od razu można stwierdzić, że tam mogą być tylko przyciski (sam myślałem że można przechowywać tam tylko przyciski typu Button, dopóki nie zrobiłem testu z Label).

komentarz 11 sierpnia 2018 przez DanielKowalskiX Początkujący (460 p.)
Przetestowałem obydwa sposoby, jednak za każdym razem zmienia tekst wszystkich guzików, a nie jedynie tych klikniętych.
komentarz 11 sierpnia 2018 przez mbabane Szeryf (79,280 p.)

Można to zrobić wykorzystując np. parametr ActionEvent, w którym przechowywane jest źródło zdarzenia:

public void buttonOnAction(ActionEvent event)
 {
        ((Button)event.getSource()).setText("Text");
 }

Taką metodę trzeba przypisać do przycisków.

komentarz 11 sierpnia 2018 przez DanielKowalskiX Początkujący (460 p.)
Świetnie!
Próbowałem już też użyć ActionEvent, ale nie wpadłem na pomysł rzutowania na Button, dziękuję Ci bardzo!

Podobne pytania

0 głosów
1 odpowiedź 420 wizyt
0 głosów
1 odpowiedź 615 wizyt
0 głosów
2 odpowiedzi 221 wizyt

92,551 zapytań

141,397 odpowiedzi

319,528 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...