2016-09-13 16 views
-1

ArrayListをJavaのグラフィカル要素と共に使用する方法を学びたいと思います。ArrayList(JAVA)にランダムなグラフィックスクエアを追加する

私は、ランダムなxとyのランダムな位置で正方形を作成するクラスがあります。

import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.util.Random; 

public class Square extends Canvas { 

    public int x, y; 

    Random r = new Random(); 


    public void paint(Graphics g) { 

     x = r.nextInt(640); 
     y = r.nextInt(480); 


     g.setColor(Color.BLACK); 
     g.fillRect(x, y, 30, 30); 


    } 

} 

を、私はJFrameのを作成し、ArrayListに正方形の要素を追加したクラスを持っています。しかし、私はそれを把握することはできません。ソリューションはシンプルで技術的かもしれないと思いますが、ちょっとしたプッシュが必要です。

import java.util.ArrayList; 

import javax.swing.JFrame; 

public class Frame { 

    public int width, height; 
    public String title; 

    public JFrame jframe; 

    ArrayList<Square> squares = new ArrayList<Square>(); 

    public Frame(String title, int width, int height) { 

     this.width = width; 
     this.height = height; 
     this.title = title; 



     display(); 
    } 

    public void display() { 

     jframe = new JFrame(); 

     jframe.setTitle(title); 
     jframe.setSize(width, height); 
     jframe.setResizable(false); 
     jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jframe.setVisible(true); 
     jframe.setLocationRelativeTo(null); 

     for(int i = 0; i < 20; i++) { 
      squares.add(new Square()); 
     } 
     jframe.add(squares); 

    } 



} 
+1

ご質問がさらに必要です。何が分からないの?コンパイル時エラーまたはランタイムエラーが発生していますか?もしそうなら、何?予期しない動作をしていますか?もしそうなら、何が起こると思いますか?実際に何が起こったのですか? – azurefrog

+1

問題はなんですか?これはコンパイルされますか(疑問 - 'JFrame.add(List)'メソッドはありません)?さらに、 'Canvas'ではなく、' JPanel'のような[lightweight components](http://stackoverflow.com/questions/13769072/differences-between-components-and-lightweight-heavyweight)を使うことをお勧めします。 – copeg

答えて

0

お互いに重なるフレームに複数のキャンバスを追加しています。

代わりに、ペイントに描画する四角形(xおよびy ints)のリストを使用してキャンバスを作成し、フレームにキャンバスを1つ追加します。

また、JFrame.add()がキャンバス全体を追加してサイズを変更するかどうかはわかりません。 layoutManagerを使用して、FlowLayoutのようなコンポーネントを追加します。 Layout managers

2

Squareクラスを削除して再起動してください。

  • それはキャンバスを拡張していてはいけない - あなたはそれがどんなGUIを拡張してはならないという意味、不必要にAWTをミックスし、
  • スイングそして、あなたの広場クラスが論理的クラスではなく、GUIクラスでなければなりませんしたくありません成分。
  • 塗装方法でランダム化しないでください。
  • それにそれが渡されたGraphicsオブジェクトを使用して自分自身を描画するpublic void draw(Graphics g)方法を与えるあなたの広場クラスxとyのintフィールド
  • を与えます。
  • 別のクラス、のJPanelを拡張するものを作成し、それをArrayList<Square>を与えます。
  • このJPanelのpaintComponentメソッドをオーバーライドします。
  • オーバーライドでは、必ずスーパーのメソッドを呼び出してください。
  • オーバーライドでは、各Squareの描画メソッドを呼び出す配列リストを繰り返し処理します。
  • このJPanelをJFrameに配置します。
関連する問題