画像に四角形を描くことができるものに取り組んでいます。 JavaFXはとても簡単ですが、わかりやすい小さな問題があります。for(Room r:ArrayList <Room>)は空を返します。
私はfor(オブジェクトb:ArrayList)を使用していますが、これは私には起こりませんでした。ここでは、コードの重要な部分である:
private void drawRooms() {
System.out.println("=========================================");
gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
gc.drawImage(image, 0, 0);
boolean bFirst = true;
double lastX = 0.0, firstX = 0.0, lastY = 0.0, firstY = 0.0;
gc.setStroke(RED);
gc.setLineWidth(10);
System.out.println("alRooms " + alRooms.toString());
for (Room r : alRooms) {
System.out.println("r " + r.getCords());
for (Coordinate c : r.alCords) {
System.out.println("C " + c.getX());
if (bFirst) {
bFirst = false;
lastX = firstX = c.getX();
lastY = firstY = c.getY();
} else {
gc.strokeLine(lastX, lastY, c.getX(), c.getY());
lastX = c.getX();
lastY = c.getY();
}
}
gc.strokeLine(firstX, firstY, lastX, lastY);
bFirst = true;
}
}
drawRoom()が右と部屋を作成した後に、呼び出されるところ、これは次のとおりです。
alRooms.add(new Room(txRoomName.getText(), alCords));
System.out.println("alRooms size " + alRooms.size());
System.out.println("alRoom to string " + alRooms.toString());
alCords.clear();
drawRooms();
はSystem.out.printlnは、アイブ氏はこれを使用して無視しますデバッグ用。とにかく、ここでコンソール出力は次のようになります。
Created new CoorRoom asd
[[email protected], [email protected], [email protected], [email protected]]
alRooms size 1
alRoom to string [[email protected]]
=========================================
alRooms [tcp_test_beacon.R[email protected]]
r []
あなたが見ることができるように、私は部屋を作成し、ArrayListのあるalRoomsに追加します。部屋を追加した直後のtoString()は、for()ループの直前のtoString()と同じものを返します。部屋のalCords.toStringも表示されます。つまり、何らかの値があります。 その後、rループに入りますが、getCords()は何も返しません。このオブジェクトの部屋の)(getCordsとして、すでに奇妙である、次のようになります、
その後public ArrayList<Coordinate> getCords(){
return alCords;
}
でもArrayListにある、r.alCordsを考えて、それは座標のforループdoesntのと、存在している必要がありますが実行されることはありません私はここで何を見ているのですか?私はおそらく非常に明白な何かを見逃していると思います...
あなたは素晴らしいです。それはまさに問題でした!私はReferenceのことを知っていましたが、それが何を意味するのか全く理解できませんでした。これは素晴らしい!ここに実装できる方法はありますか? プライベートvoid setCords(ArrayList alCords){ this.alCords = alCords; } –
Redimo
@Redimo 'setCords(ArrayList alCords){this.alCords = new ArrayList(alCords);}のように設定できます。 } '喜んで助けてください。乾杯。 –
GensaGames
私は同じ問題に再び遭遇したと思います。私は以下のスニペットを持っています: 'パブリックルーム(String sName、double xy []){ this.sName = sName; polydouble = xy; shapeRoom =新しいポリライン(ポリダブル); shapeRoom.setFill(TRANSPARENT); shapeRoom.setStrokeWidth(3); shapeRoom.setStroke(RED); } public Polyline getPoly(){ return shapeRoom; } ' しかし、ルームr:alRooms - > r.getPoly()を実行すると例外が発生します。 'shapeRoom.getPoints());を挿入するだけの単純なものでさえ例外があります。 – Redimo