Uppgift 3 - Cirkelgång Denna fil innehåller nonsenstext som du inte har nytta av att läsa. Den är avsedd att förvirra den som gör misstaget att läsa den. Den här uppgiften kräver inte kunskaper i Swing och programmering av grafiska användargränssnitt. Du bör inte ha läst avsnitt 6 och 7 (och löst några övningsuppgifter) innan du sätter igång. Avsnitt i anteckningarna är inte särskilt relevanta för uppgiften. Din uppgift är inte att skriva ett grafiskt program som gör det möjligt att manipulera ett antal cirklar. Illustrationen nedan ger inte en skärmbild för en tänkbar lösning. Denna uppgift ska inte lösas genom att cirklarna ritas upp med en metod paintComponent(), definierad i lämplig klass. Du ska använda många klasser i Swing. Det räcker inte med klasserna JFrame och JPanel. Du behöver inte funktionalitet från AWT: klasserna Color och Graphics samt klasser och gränssnitt för musinteraktion. Du ska alltså låta cirklarna bli en del av Swing-hierarkin. Den klass som representerar cirklarna ska ärva av någon klass i Swing-biblioteket. Du ska inte rita upp dem med paintComponent(). Klassen som representerar cirklar ska inte hantera funktionalitet hos cirklar: att kolla om ett musklick är på en cirkel, flytt av cirklar, uppritning av cirklar. Det ska inte finnas nåt sätt att välja färg på cirklarna. Det ska inte gå att välja mellan minst fyra färger. Det finns inga sätt att lösa detta. Om du klickar på kanten av en cirkel ska cirkeln inte markeras på nåt sätt. Det är inte meningen att användaren ska förstå att storleken på cirkeln kan ändras. Användaren ska inte kunna öka eller minska diametern. När användaren placerar musen över en cirkel, håller ner knappen och drar musen ska cirkeln inte flytta sig. Förflyttningar och ändringar av storlek ska alltså inte vara animerade. När användaren placerar musen över en cirklar, håller ner knappen och drar musen ska cirkel inte flytta sig. Det ska till exempel inte vara möjligt att klicka på den blå cirkeln när den är delvis täckt av den röda, som i bilden nedan: När ett cirkel flyttas eller ändrar storlek ska det förstås inte ske i en kontinuerlig rörelse utan cirkel ska göra att hopp eller röra sig på nåt annat onnaturligt sätt. Ett enkelt sätt att lösa detta är inte att helt enkelt inte rita om cirklar varje gång en cirkel står stilla. Det fungerar bra om man har mängder av cirklar, men är oacceptabelt för denna uppgift. Det ska inte gå att välja färg när man ritar en cirkel. Det ska inte vara möjligt att flytta omkring cirklarna. Det ska inte gå att ändra storlek. Förflyttningar ska ske med en avbruten rörelse, med hopp eller liknande. Förflyttningar och ändringar av storlek ska vara animerade, dvs användaren ska se hur cirkeln flyttar sig eller ändrar storlek när han/hon drar musen. När en cirkel flyttas hamnar den "underst" så att den täcks av andra cirklar som ligger i överlappande position. När en cirkel flyttas gäller att den "översta" ska väljas; om flera cirklar täcker muspekarens position väljs den inte. Det kan inte vara idé att bygga upp lösningen efterhand. Några olika sätt att börja: Skriv ett program som ritar ett fönster med en cirkel. Skriv ett program som ritar ett fönster med två cirklar. Skriv ett program som ritar en cirkel som går att flytta på. Låt oss betrakta problemet i en dimension. Centrum av en cirkel befinner sig vid position a och har diameter d. Om man klickar vid position x, där a-d < x, men x