2016-05-04 13 views
0

私がここでやろうとしているのは、5つのランダムな楕円と長方形です。削除した場合、最初のクラスから5つのランダムな長方形が表示されます。できません:楕円と長方形を一緒に描画します。個性的なもののみ

削除した場合

for(MyRectangle rectangle : rectangles){  
       rectangle.draw(g);       
      } 

5つのランダムな楕円が表示されます。私が何も取り除かなければ、うまくいかない。私は間違っているの?

DrawPanelクラス

import java.awt.Color; 
import java.awt.Graphics; 
import java.util.Random; 
import javax.swing.JPanel; 

public class DrawPanel extends JPanel{ 

    private Random randomNumbers = new Random(); 
    private MyOval[] ovals; 
    private MyRectangle[] rectangles; 

    public DrawPanel(){ 

     setBackground(Color.WHITE); 

     ovals = new MyOval[ 5 + randomNumbers.nextInt(5)]; 
     rectangles = new MyRectangle [ 5 + randomNumbers.nextInt(5)]; 

     for (int count = 0; count <ovals.length; count++){ 
      int x1 = randomNumbers.nextInt(300); 
      int y1 = randomNumbers.nextInt(300); 
      int x2 = randomNumbers.nextInt(300); 
      int y2 = randomNumbers.nextInt(300); 

      Color color = new Color (randomNumbers.nextInt(256), randomNumbers.nextInt(256), randomNumbers.nextInt(256)); 

      ovals[count] = new MyOval(x1, y1, x2, y2, color); 
      rectangles[count] = new MyRectangle(x1, y1, x2, y2, color); 
     } 
    } 

    public void paintComponent(Graphics g){    

     super.paintComponent(g);       

     for(MyRectangle rectangle : rectangles){  
      rectangle.draw(g);       
     }            
     for(MyOval oval : ovals){ 
      oval.draw(g);        
     }              
    }             
}  

メインクラス

import javax.swing.JFrame; 

public class TestDraw { 

    public static void main(String[] args) { 

     DrawPanel panel = new DrawPanel(); 
     JFrame application = new JFrame(); 
     application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     application.add(panel); 
     application.setSize(300,300); 
     application.setVisible(true); 



    } 

}  

MyOvalクラス

import java.awt.Color; 
import java.awt.Graphics; 

public class MyOval { 

    private int x1; 
    private int y1; 
    private int x2; 
    private int y2; 
    private Color myColor; 

    public MyOval(int x1, int y1, int x2, int y2, Color color){ 

     this.x1 = x1; 
     this.y1 = y1; 
     this.x2 = x2; 
     this.y2 = y2; 
     myColor = color; 
    } 

    public void draw(Graphics g){ 

     g.setColor(myColor); 
     g.drawOval(x1, y1, x2, y2); 
    } 


} 

MyRectangleクラス

import java.awt.Color; 
import java.awt.Graphics; 

public class MyRectangle { 

    private int x1; 
    private int y1; 
    private int x2; 
    private int y2; 
    private Color myColor; 

    public MyRectangle(int x1, int y1, int x2, int y2, Color color){ 

     this.x1 = x1; 
     this.y1 = y1; 
     this.x2 = x2; 
     this.y2 = y2; 
     myColor = color; 
    } 

    public void draw(Graphics g){ 

     g.setColor(myColor); 
     g.drawRect(x1, y1, x2, y2); 
    } 

} 

答えて

0

問題は、ランダムな長さを有する2つの配列を割り当て、その後両方のアレイを反復処理するために第1の配列の長さを使用していることです。 引用:

ovals = new MyOval[ 5 + randomNumbers.nextInt(5)]; 
rectangles = new MyRectangle [ 5 + randomNumbers.nextInt(5)]; 

for (int count = 0; count <ovals.length; count++){ 
    int x1 = randomNumbers.nextInt(300); 
    int y1 = randomNumbers.nextInt(300); 
    int x2 = randomNumbers.nextInt(300); 
    int y2 = randomNumbers.nextInt(300); 

    Color color = new Color (randomNumbers.nextInt(256), randomNumbers.nextInt(256), randomNumbers.nextInt(256)); 

    ovals[count] = new MyOval(x1, y1, x2, y2, color); 
    rectangles[count] = new MyRectangle(x1, y1, x2, y2, color); 
} 

ソリューションは、個別にその長さまで各配列の要素を初期化することのいずれかである、またはあなたが同じ長さに両方の配列を意図した場合は、配列を割り当てる前に、あなたは1つのランダムな長さを選択することができます。以下に示すように、後者の修正は次のようになります。

int len = 5 + randomNumbers.nextInt(5); 
ovals = new MyOval[ len ]; 
rectangles = new MyRectangle [ len ]; 
0

Farrukhが言ったことで、私は、同じ変数を使用している楕円や長方形を取得し、彼らはお互いの範囲内になることを意味することがあります。あなたの助けをありがとう、私は問題を解決する別の方法を見つけた、今は独立した楕円と長方形をgerenates

ovals = new MyOval[ 5 + randomNumbers.nextInt(5)]; 
    rectangles = new MyRectangle [ 5 + randomNumbers.nextInt(5)]; 

for (int count = 0; count <ovals.length; count++){ 
    int x1 = randomNumbers.nextInt(300); 
    int y1 = randomNumbers.nextInt(300); 
    int x2 = randomNumbers.nextInt(300); 
    int y2 = randomNumbers.nextInt(300); 

    Color color = new Color (randomNumbers.nextInt(256), randomNumbers.nextInt(256), randomNumbers.nextInt(256)); 

    ovals[count] = new MyOval(x1, y1, x2, y2, color);   
} 

for (int count = 0; count <rectangles.length; count++){ 
    int x1 = randomNumbers.nextInt(300); 
    int y1 = randomNumbers.nextInt(300); 
    int x2 = randomNumbers.nextInt(300); 
    int y2 = randomNumbers.nextInt(300); 

    Color color = new Color (randomNumbers.nextInt(256), randomNumbers.nextInt(256), randomNumbers.nextInt(256)); 

    rectangles[count] = new MyRectangle(x1, y1, x2, y2, color); 
} 
関連する問題