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