Permalänk

Java, paintComponent probs...

Hej!

Sitter som ett frågetecken just nu, paint strular som bara den.

Har följande kod:

try { while (q != null) { Circle c = (Circle)q.remove (); g2.setColor(c.getColor()); g2.drawOval(ellipseX, ellipseY, 100, 100); ellipseX += 150; } } catch (QueueException e) { System.out.println ("Inga fler cirklar.\n" + e); }

Kodsnutten ligger i en metod som heter drawCircles(Graphics2D g2) som i sin tur anropas i paintComponent().
Jag har en kö, FIFO, där jag hämtar mina (2 stycken) objekt/cirklar ifrån med remove ().
Problemet är, kör jag utan loopen så ritas cirkel nr 2 ut i kön, den första kommer aldrig med. Testade att köra en System.out.println inne i paintComponent och det verkar som om den anropas 2 gånger.
Kör jag med loopen så loopar den tills kön/länkade listan når null, då ritas ingen cirkel ut.

Vad kan det vara för fel? Jag vill att Cirkel nr 1 samt 2 skall ritas upp, inte att den skippar 1 och ritar upp 2 enbart.

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk
Medlem
Skrivet av Darkpower:

Hej!

Sitter som ett frågetecken just nu, paint strular som bara den.

Har följande kod:

*klipp*

Kodsnutten ligger i en metod som heter drawCircles(Graphics2D g2) som i sin tur anropas i paintComponent().
Jag har en kö, FIFO, där jag hämtar mina (2 stycken) objekt/cirklar ifrån med remove ().
Problemet är, kör jag utan loopen så ritas cirkel nr 2 ut i kön, den första kommer aldrig med. Testade att köra en System.out.println inne i paintComponent och det verkar som om den anropas 2 gånger.
Kör jag med loopen så loopar den tills kön/länkade listan når null, då ritas ingen cirkel ut.

Vad kan det vara för fel? Jag vill att Cirkel nr 1 samt 2 skall ritas upp, inte att den skippar 1 och ritar upp 2 enbart.

Testa:

Queue<Circle> q = ... ... while (Circle c = q.peek()) { g2.setColor(c.getColor()); ... osv }

Kö-objektet kommer aldrig bli null så din while-sats är evig och tar bara slut pga. exceptionen som remove() kastar. Då är det bättre att använda peek för att hämta och kolla om det hämtade objektet är null ( == inga flera objekt i din kö) eller inte. Använd även generics så slipper du casta till Circle.

Sen är det lite magert att ha en klass Circle som bara innehåller färginformation. Den beskriver ingen cirkel så varför heter den Circle?

Visa signatur

Kom-pa-TI-bilitet

Permalänk

Nej, alltså klassen Circle har över 100 rader kod med egenskaper, men nu testade jag med lite random bara för att se om något lyckas.

Jag undrar dock om det är en lösning på mitt problem. Allt skall ritas inkrementellt, dvs gammalt innehåll skall vara kvar.

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk
Medlem
Skrivet av Darkpower:

Jag undrar dock om det är en lösning på mitt problem. Allt skall ritas inkrementellt, dvs gammalt innehåll skall vara kvar.

Då tycker jag du ska köra en LinkedList och for (Circle c : myCircles) { ... } istället. Där tas objekten aldrig bort.

Visa signatur

Kom-pa-TI-bilitet