我正在处理可以在图像上绘制矩形的东西。它的工作非常好,因为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