我正在處理可以在圖像上繪製矩形的東西。它的工作非常好,因爲JavaFX是一件輕而易舉的事情,但我有一個我似乎不明白的小問題。(房間r:ArrayList <Room>)返回空房間
我一直使用for(object 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]2a467bed]
alRooms size 1
alRoom to string [[email protected]]
=========================================
alRooms [[email protected]]
r []
正如你所看到的,我創建了一個房間,並把它添加到alRooms這是一個ArrayList。 toString()在添加房間之後立即返回與for()循環之前的toString()相同的值。我還會顯示房間的alCords.toString,這意味着它具有某種價值。 然後,它進入r循環,但getCords()不返回任何內容。這已經是奇怪的,因爲getCords(對象間的)看起來是這樣的:
public ArrayList<Coordinate> getCords(){
return alCords;
}
之後,甚至想到r.alCords,這是一個ArrayList,應該存在,它不併爲永遠不會執行循環座標,由缺少System.out看到..我在這裏看什麼?我想我可能會錯過一些非常明顯的東西...
你真棒。這正是問題!我知道參考資料,但從未完全理解這意味着什麼。這很棒!有沒有什麼辦法可以在這裏實現它: private void setCords(ArrayList alCords){ this.alCords = alCords; } –
Redimo
@Redimo你可以設置,像'setCords(ArrayList alCords){this.alCords = new ArrayList(alCords); '很高興幫助。乾杯。 –
GensaGames
我想我可能會再次遇到同樣的問題。我有以下代碼片段: 'public room(String sName,double xy []){ this.sName = sName; polydouble = xy; shapeRoom = new Polyline(polydouble); shapeRoom.setFill(TRANSPARENT); shapeRoom.setStrokeWidth(3); shapeRoom.setStroke(RED); } public Polyline getPoly(){ return shapeRoom; }' 但是,當我做室r:alRooms - > r.getPoly(),我得到一個異常。甚至像插入'shapeRoom.getPoints())'一樣簡單;'給我一個例外。 – Redimo