paintComponent() - problem

0

Witam mam maly problem z rozwiklaniem pewnej sprawy. Za pomoca klasy paintComponent() stworzylem obiekt, ktory kreci sie wokol swojego punktu srodkowego. Po dodaniu nowego elementu, tez sie kreci, chociaz moje zalozenie bylo takie, aby pozostal w jednej pozycji.

Zalozmy, ze struktura kodu jest podobna :

 

public void paintComponent(Graphics g){

  super.paintComponent(g);
   
  Graphics2D g2 =  (Graphics2D) g; 

  g2.rotate(Math.toRadians(10), 15, 15); 

  g2.fillRect(40,40, 100, 50);                   // pierwszy obiekt
  
   
  
  Graphics2D gNew =  (Graphics2D) g;             // drugi obiekt
  
    g2.fillRect(80,90, 10, 40);                
  
}

Ta metoda dodawac mozna wiecej obiektow i rysowac je na planszy pod warunkiem, ze nie ma metody rotate().
Niestety gdy jest metoda rotate to ten drugi obiekt, tez sie kreci.
Moglby mi ktos napisac, jak mozna zmienic kod, aby drugo obiekt sie nie kreci, ale byl w jednej pozycji?

Z gory wielkie dzieki!!!

0

Te wiersze (zwłaszcza komentarz o jakimś drugim obiekcie) są lekko bez sensu

  Graphics2D gNew =  (Graphics2D) g;             // drugi obiekt
  g2.fillRect(80,90, 10, 40);

Spróbuj tak:

  Graphics2D gNew =  (Graphics2D) g;             // drugi obiekt
  gNew.fillRect(80,90, 10, 40);

lub tak:

  g2.fillRect(80,90, 10, 40);
  g2.rotate(Math.toRadians(10), 15, 15);
  g2.fillRect(40,40, 100, 50);
0

Ty tylko rzutujesz, ale w rzeczywistości pracujesz na jednym i tym samym obiekcie. Zrzuć sobie macierz transformacji:

AffineTransform af=g2.getTransform(); //zrzucasz aktualną macierz
g2.rotate(Math.toRadians(10), 15, 15);  //wykonanie operacji macierzowej (obrót)
g2.fillRect(40,40, 100, 50);
g2.setTransform(af); //wczytanie macierzy sprzed obrotu
g2.fillRect(80,90, 10, 40);

Jest to szybsze niż ciągłe operacje macierzowe translacji/rotacji do i z powrotem.

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