Vaje 5: Urejanje grafov
Program iz prejšnjih vaj bomo dopolnili tako, da bo možno graf še malo preoblikovati.
Platno dopolni tako, da bomo točke narisanega grafa lahko z miško premikali po platnu ter dodajali/brisali točke/povezave. V ta namen dodaj platnu vse metode vmesnikov MouseListener, MouseMotionListener in KeyListener in poskrbi, da se bodo klicale ob ustreznih dogodkih. Večina od teh metod bo ostala praznih, definirati je potrebno le:
- metodo
mousePressed(MouseEvent event), ki se pokliče, ko z miško kliknemo na platno - metodo
mouseDragged(MouseEvent event), ki se pokliče vsakič, ko miško premaknemo po platnu in ob tem držimo tipko na miški - metodo
mouseReleased(MouseEvent event), ki se pokliče, ko spustimo tipko na miški - metodo
keyPressed(KeyEvent event), ki se pokliče, ko pritisnemo tipko na tipkovnici
Pri urejanju grafa bomo točke označevali in izvajali akcije na označenih točkah. Točka, ki jo kliknemo, bo aktivna, dokler ne spustimo tipke na miški. Stanja točk bomo prikazovali z različnimi barvami. Za beleženje vseh teh stanj bo potrebno platnu dodati naslednje komponente:
- aktivna točka - če ima vrednost
null, ni aktivna nobena točka - barva aktivne točke - če ima vrednost
null, se barva točke ne spremeni, ko točka postane aktivna - množica označenih točk
- barva označenih točk
Akcije naj bodo naslednje:
- pritisk tipke na miški
- Če kliknemo na točko (ali v njeno bližino), naj točka postane aktivna (drugače pobarvana).
- premikanje miške
- Če imamo aktivno točko, naj se ta premika skupaj miško.
- Če aktivne točke ni, naj miški sledijo vse označene točke.
- spust tipke na miški
- Če se aktivna točka med pritiskom in spustom tipke ni premaknila, naj postane označena (če še ni bila) oz. odznačena (če je že bila označena). Točka ne bo več aktivna
- Če se je aktivna točka premaknila, se ne zgodi nič (treba je samo zabeležiti, da točka ni več aktivna).
- Če ni aktivne točke, naj doda novo točko in jo poveže z vsemi označenimi točkami.
S tipkami na tipkovnici pa bomo izvajali naslednje akcije:
- označi vse točke
- odznači vse točke
- dodaj vse povezave med vsemi označenimi točkami
- zbriši vse povezave med vsemi označenimi točkami
- zbriši vse označene točke