2016-03-19 32 views
0

オブジェクトを動的に作成する、たとえばJavaFXで円を作成したい。私のコードはこのようになります。オブジェクトを動的に作成してリストに追加するJavaFX

List<Node> list = new ArrayList<>(); 

    // Create circle dynamically 
    for(int i = 0; i < 10; i++) { 
     list.add(new Circle()); 
    } 

ここで私の問題は、各円の一意性を追加する方法です。たとえば、各サークルの色とサイズを変更する場合です。どうすれば達成できますか?助けてください。

+0

ループのMath.randomを半径で使うと、多くの半径を持つ様々な円を得ることができ、arraylistに追加することができます – SmashCode

答えて

1

RANDOM:それはすべてあなたがランダムな属性を持つように各サークルをしたい場合は、たとえば、円メソッド/コンストラクタと組み合わせてMath.rand()方法を利用して、その後、それらを変更したいどのようにダウンしています:

for(int i = 0; i < 10; i++){ 
    Circle circle = new Circle(Math.rand() * 600, Math.rand() * 400, Math.rand() * 30 + 20); 
    list.add(circle); 
    switch((int)(Math.rand() * 4)){ 
    case 0: 
     circle.setFill(Color.GREEN); 
     break; 
    case 1: 
     circle.setFill(Color.RED); 
     break; 
    case 2: 
     circle.setFill(Color.BLUE); 
     break; 
    case 3: 
     circle.setFill(Color.YELLOW); 
     break; 
    } 
} 

このように、位置、半径および色の両方はランダムです。自然に使用した値をいつでも変更できます。この例では、ボールのサイズは20-49、幅は0-599、高さは0-399です。色は4種類あります。

NON-RANDOM: の場合は、しかし、あなたは特に各円の値を設定したい、あなたは常に円にアクセスするためにlist.get(int index)を使用して個別にアクセスすることができます。サークル固有のメソッドを使用できるようにするには、リスト要素をCircle型にキャストする必要があります。ここに例があります:

((Circle)list.get(0)).setRadius(45.3); 
((Circle)list.get(1)).setFill(Color.ORANGE); 
((Circle)list.get(09).setCenterX(392); 

ただし、この種の方法を使用するには、リストの要素が円であることを必ず確認する必要があります。あなたの例ではこれが提供されていますが、大きなプログラムを作成し、サークルよりも他のノードがリストに含まれている場合、同じレベルの制御が難しいかもしれません。サークルにのみリストを使用する場合は、代わりにList<Circle>タイプにすることをおすすめします。

+0

私はそれを試していただきありがとうございます。 –

1

forループで新しいCircleインスタンスを作成し、好きなように変更してリストに追加するのはなぜですか?

List<Node> list = new ArrayList<>(); 

// Create circle dynamically 
for(int i = 0; i < 10; i++) { 
    Circle newCircle = new Circle(); 
    newCircle.setSize(i*2); //Just an example 
    list.add(newCircle); 
} 
+0

おかげさまで試してみましょう。 –

関連する問題