2015-04-12 2 views
0

Вот два экземпляра одного и того же кода, который рисует кучу прямоугольников, наложенных по диагонали, за исключением второго экземпляра - скобки вокруг «i^2» для x и y значения. Я считаю, что прямоугольники должны начинаться с (0,0) в обоих случаях, но в первом случае они не начинаются в начале координат. Вместо этого они начинают слегка отходить от источника. Почему существует разница, когда прямоугольники добавляются в JFrame?Java, JFrame, JComponent, Rectangles

использованием javax.swing.JComponent javax.swing.JFrame и java.awt.Rectangle

for(int i=0;i<600;i++){ 
      Rectangle rect1 = new Rectangle(20*i^2, 20*i^2, 50, 100); 
      g2.draw(rect1); 
} 

for(int i=0;i<600;i++){ 
      Rectangle rect1 = new Rectangle(20*(i^2), 20*(i^2), 50, 100); 
      g2.draw(rect1); 
} 

Мой код находится в двух классах. Вот главный класс:

import javax.swing.JFrame; 

public class MainClass { 
    public static void main(String[] args){ 
     JFrame window = new JFrame(); 
     window.setSize(600,600); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     DrawingComponent drawing = new DrawingComponent(); 
     window.add(drawing); 

     window.setVisible(true); 
    } 
} 

А вот код для класса DrawingComponent, что делает Прямоугольники быть добавлен в JFrame:

import javax.swing.JComponent; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 

public class DrawingComponent extends JComponent{ 
    public void paintComponent(Graphics g){ 
     Graphics2D g2 = (Graphics2D) g; 

     for(int i=0;i<600;i++){ 
      Rectangle rect1 = new Rectangle(20*i^2, 20*i^2, 50, 100); 
      g2.draw(rect1); 
     } 
    } 
} 
+0

Как вы выполняете картину? Рассмотрите возможность создания примерного примера – MadProgrammer

ответ

0

Выражение 20*i^2 не то же самое, как 20*(i^2).

Побитовый оператор XOR ^ имеет более низкий приоритет, чем умножение *, и поэтому два выражения будут давать разные результаты.