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

JavaFX - wysyłanie parametru do EventHandler

0 głosów
99 wizyt
pytanie zadane 9 maja 2017 w Java przez PgK Obywatel (1,380 p.)

Cześć,

Program pisze w javie z wykorzystaniem JavaFX. Mam tablice jakiś obiektów np. prostokątów i tworze do nich akcje kliknięcia. Potrzebuję w funkcji akcji znać indeks obiektu w który ktoś kliknął. 


 

Rectangle [] rect = new Rectangle[100];

for(int i = 0 ; i < 100 ; i++)
{
     rect[i] = new Rectangle()
     rect[i].setOnMouseClicked(new EventHandler<MouseEvent>()
     {
			@Override
		          public void handle(MouseEvent t) 
			 {

				 rect[i].setFill(Color.AQUAMARINE);   // zmienna i   nie istnieje
						
		            }
    });
}



 

2 odpowiedzi

+1 głos
odpowiedź 9 maja 2017 przez Mateusz51 Nałogowiec (28,220 p.)

Najlepiej bedzie to zrobić tak

Rectangle [] rect = new Rectangle[100];
EventHandler<MouseEvent> handler = new EventHandler<MouseEvent>(){
    @Override
     public void handle(MouseEvent t) 
             {
                    Rectangle rect = (Rectangle) t.getSource();
                    rect.setFill(Color.AQUAMARINE);
              }
    
}
 
for(int i = 0 ; i < 100 ; i++)
{
     rect[i] = new Rectangle();
     rect[i].setOnMouseClicked(handler);
}
}

 

Unikasz wtedy tworzenia nowego obiektu handlera oraz w handlerze pobierasz źródło eventu. Bardzo przydatna rzecz.

komentarz 11 maja 2017 przez PgK Obywatel (1,380 p.)
Dzięki za pomoc ;)
0 głosów
odpowiedź 9 maja 2017 przez PgK Obywatel (1,380 p.)

Mam rozwiązanie, może się komuś przyda.

Stworzyłem klase myRectangle która dziedziczy po rectangle ale ma w sobie iterator.

class MyRectangle extends Rectangle
{
     public int i;

     public MyRectangle (int i)
     {
            this.i = i;
     }

}

 

A w EventHandlerze pobrałem zrodło kliknięcia i zapisałem do zmiennej pomocniczej typu MyRectangle a następnie dostałem się do zmiennej i.

 

rect[i].setOnMouseClicked(new EventHandler<MouseEvent>()
  {
            @Override
              public void handle(MouseEvent t) 
              {
                   MyRectangle pom = (MyRectangle) t.getSource()  
                   System.out.println(pom.i);
                         
               }
 });

 

Podobne pytania

0 głosów
1 odpowiedź 101 wizyt
pytanie zadane 23 kwietnia 2017 w JavaScript przez hoktaur Pasjonat (22,310 p.)
0 głosów
1 odpowiedź 233 wizyt
0 głosów
1 odpowiedź 232 wizyt
pytanie zadane 24 maja 2018 w Java przez Darek554 Użytkownik (980 p.)

87,902 zapytań

136,488 odpowiedzi

304,300 komentarzy

58,284 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...