Mám grid pane a každé políčko obsahuje jeden obrázok. Pri kliklutí na hociktorý obrázok potrebujem tento obrázok zmeniť.
Zaregistoval som MousePressedEvent každého obrázka na jeden event handler pretože obrázkov môže byť napríklad 100x100. Problémom ale je to že pri samotnom "handlovaní" neviem ktorý z obrázkov mám zmenit pretože jediný parameter metódy handle je parameter typu MouseEvent a tan neobsahuje informáciu o presnej poloho obrázka v gride.
Čiže by som potreboval niečo takéto:
@Override
public void handle(PolohaObrazku poloha){
zmenObrazok(poloha);
}
Však pokud má každej obrázek svůj vlastní handler, "víš", na který uživatel kliknul a akorát ho obnovíš nebo vyměníš...
Ale podle popisu to vypadá jako by ses snažil zprácovávat jen události ze všech a pak zkoušel určit, co vlastně tu událost vyhodilo. Taky by to šlo ale tahle cesta by ti dala zbytečně moc práce.
Zkus to jak jsem ti naznačil. Každý obrázek bude mít vlastní handler, který bude dělat akci, kterou chceš. Tj. nebudeš to zpracovávat centrálně ale každej obrázek se "obslouží sám".
Vyriešil som to tým že kažy obrázok má svoj handler, ktorý dostane pozíciu obrázka ako parameter konštruktora, vypadá to že to funguje
No nedalo by sa to spravit nejako elegantnejšie použitím java fx custom events?
Problém je že som nenašiel žiaden tutorial kde by som pochopil ako custom events implementovať, ani na oracle dokumentacii...
#5me.name
Aha tak v tom případě, mě už vůbec nenapadá na co potřebuješ tu pozici obrázku. Dyť ta tvá třída by měla mít už v konstruktoru nějakou doménovou třídu nebo něco, co má kompletní informace k tomu, co chceš zobrazovat.
Tj. jediný co pak musíš udělat je třeba tohle:
final MyImageView prvekGridu = new MyImageView(tridaSInformacemaOObrazku);
prvekGridu.setOnMouseClicked(new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent event)
{
prvekGridu.aktualizujObrazek(novyObrazek);
}
});
Případně do toho handleru můžeš hodit jinou třídu, která ten novej obrázek bude mít v sobě a na základě něčeho ti dá takovej, jakej potřebuješ. Ale nevím, jak přesně ten program, co děláš funguje ani čeho přesně chceš dosáhnout ani jak ty obrázky prohazuješ.