2015-04-12 2 views
0

Voici deux exemples du même code qui dessine un ensemble de rectangles superposés en diagonale, sauf dans le second cas, il y a des parenthèses autour de "i^2" pour le x et le y valeurs. Je crois que les rectangles devraient commencer à (0,0) dans les deux cas, mais dans le premier cas ils ne commencent pas à l'origine. Au lieu de cela, ils commencent légèrement à partir de l'origine. Pourquoi y a-t-il une différence lorsque les rectangles sont ajoutés au JFrame?Java, JFrame, JComponent, Rectangles

utilisant javax.swing.JComponent javax.swing.JFrame et 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); 
} 

Mon code est en deux classes. Voici la classe principale:

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); 
    } 
} 

Et voici le code pour la classe DrawingComponent qui fait Rectangles à ajouter à la 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

Comment faites-vous la peinture? Envisagez de fournir un exemple exécutable – MadProgrammer

Répondre

0

L'expression 20*i^2 n'est pas la même chose que 20*(i^2).

L'opérateur XOR bit à bit ^ a une priorité inférieure à la multiplication * et les deux expressions produiront donc des résultats différents.