Laborationsuppgift C
Så här löste jag (kortfattat) laborationsuppgift C:
Programmeringsprocessen var en iterativ historia som blev allt för omfattande och oöverskådlig för att lista i punktform. Jag jobbade länge med en tvåklasslösning där bollarna ritade (och ritade över) "sig själva" på en vanlig JPanel med hjälp av en referens till dess grafikkontext, men tvingades till slut tänka om då bollarna envisades med att rita över även mina JMenuItem:
Den till synes enda lösningen på problemet var att med jämna mellanrum anropa panelens repaint-metod, men att göra det från varje enskild boll efter varje enskild förflyttning fick panelen att flimra och programmet att nästan helt stanna upp. Jag beslutade mig därför för att programmera en mellanhand mellan gränssnittet och bollarna vars paintComponent-metod jag överskuggade för att istället därifrån rita bollarna. I klassen, kallad BallPanel, implementerade jag sedan en CyclicBarrier programmerad att ge vika först när samtliga bollar slutfört sin förflyttning och då i sin tur rita om hela panelen. Härifrån försökte jag också länge implementera kollisionsdetektion bollarna emellan, ett projekt jag till slut valde att skrota då jag, på grund av att varje boll opererade i en egen tråd, aldrig lyckades uppnå ett resultat jag var nöjd med.
Gränssnittet och öppna/spara-funktionaliteten kom in i bilden först senare och utgjorde aldrig något större problem. Istället för att som vanligt sitta och brottas med Javas LayoutManager-interface i timtal bestämde jag mig tidigt i programmeringsprocessen för att enbart använda en JMenuBar, vilket tvingade mig att tänka om men i slutänden sparade både tid och gav ett tillfredsställande resultat.
Ladda ner min (färdigkompilerade) lösning här!.