paintComponent() - Problem z rysowanie obrazu

0

Oto kawałek kody metody paintComponent():

                    // niegenryczne
                    for(int i = 0; i < nonGenericAgents.size(); i++)
                    {
                        Image img = Toolkit.getDefaultToolkit().getImage("star.jpg");                        
                        Image img2 = Toolkit.getDefaultToolkit().getImage("questionmark.png");

                        String name2 = null;
                        if(nonGenericAgents.get(i).agentTextType!=null)
                        {
                            name2 = nonGenericAgents.get(i).agentTextType;
                        }

                        //single
                        if(nonGenericAgents.get(i).getAsMany() == false)
                        {
                            super.getComponentGraphics(g).setColor(Color.WHITE);
                            g2.fill((Ellipse2D)nonGenericAgents.get(i).getEllipse());
                            g2.fill((Rectangle2D)nonGenericAgents.get(i).getRectangle());
                            g2.drawImage(img2,
                                    (int)nonGenericAgents.get(i).getEllipse().getMinX()+5,
                                    (int)nonGenericAgents.get(i).getEllipse().getMinY()+5, 15, 15, null);
 

Po stworzeniu obiektu z danej klasy rysowana jest elipsa i prostokat, ale przy pierwszym stworzeniu nie rysuje się obrazek. Staje się to dopiero, po stworzeniu drugiego obiektu.
Dlaczego??

0

IMHO, umieszczanie tego

     Image img = Toolkit.getDefaultToolkit().getImage("star.jpg");                        
     Image img2 = Toolkit.getDefaultToolkit().getImage("questionmark.png");

w kodzie metody paintComponent() jest głupie. Przy każdym odrysowaniu (użytkownik wyciągnął okno na wierzch, rozciągnął okno, ...) obrazek będzie na nowo czytany z dysku.
Obrazki img, img2 to powinny być pola w klasie, powinny być czytane raz.

0

Dzięki za podpowiedź, poprawiłem to, ale cały czas mam ten sam problem.

0

Po stworzeniu obiektu z danej klasy rysowana jest elipsa i prostokat, ale przy pierwszym stworzeniu nie rysuje się obrazek. Staje się to dopiero, po stworzeniu drugiego obiektu.

Dla mnie powyższe zdanie jest całkowicie niezrozumiałe.
Co to jest dana klasa?
Tworzysz dwa obiekty, oba wyświetlasz? Po wyświetleniu drugiego na pierwszym pojawia się obrazek (obrazek to img2 ?), którego wcześniej nie było?
I jeszcze parę podobnych pytań.

0

Mam panel, na którym rysuje. Wyklikuje na nim stworzenie obiektu klasy

nAgent

, które są przechowywane na liście nonGenericAgentList

. Stworzenie tego agenta wywołuje paintComponent,a co za tym idzie powoduje narysowanie na panelu elipsy, prostokata i obrazka img2. Gdy tworze pierwszy obiekt z klasy <code class="java">nAgent

rysuje się tylko elipsa i prostokat, a gdy tworze drugi, to rysuje się elipsa, prostokąt i obrazek, a także dorysowywany jest obrazek do poprzedniej elipsy i prostokąta.

0

Nie potrafię postawić diagnozy. Ja by zrobił coś takiego:

       g2.fill((Rectangle2D)nonGenericAgents.get(i).getRectangle());
       System.out.println("img2 = "+img2));
       System.out.println("x = "+(int)nonGenericAgents.get(i).getEllipse().getMinX()+5));
       System.out.println("y = "+(int)nonGenericAgents.get(i).getEllipse().getMinY()+5));
       g2.drawImage(img2,
               (int)nonGenericAgents.get(i).getEllipse().getMinX()+5,
               (int)nonGenericAgents.get(i).getEllipse().getMinY()+5, 15, 15, null);
0

To jest to samo:)

0

Ty naprawdę jesteś taki nierozgarnięty, czy tylko udajesz?
Ten kod nie miał niczego naprawić, on miał pomóc postawić diagnozę.
Co program wypisał na konsoli?

0

Aaaaaa:)

img2 = sun.awt.image.ToolkitImage@1430b5c
x = 7005
y = 1255
img2 = sun.awt.image.ToolkitImage@1430b5c
x = 7005
y = 1255
img2 = sun.awt.image.ToolkitImage@1430b5c
x = 7065
y = 1925

Czyli to samo po utworzeniu pierwszego obiektu, co po utworzeniu drugiego obiektu.

0

Wtf?
x i y to współrzędne lewego górnego wierzchołka rysowanego obrazka. Ty masz taką rozdzielczość monitora?

0

Faktycznie dziwne, nie mam aż takiej rozdzielczości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1