我从一个存储在单独行上的文本文件中读取对象(字符串,但我将它们转换为对象)。
编辑:我的问题是当对象被添加到面板时,对象会在彼此之上被拉出来。对象有自己独立的X和Y坐标,它们应该被绘制出来。
像这样(这是我读取的保存文本文件):
Described,Bus,182,73,PlaceWithDesc,random desc
Named,Bus,53,31,Place1
Named,train,84,100,Place2
标记[0]只是一个硬编码字符串
[1]是一种传输类别(它是一个对象,当它在图片面板上绘制出来时,它会给出三角形的颜色)
[2]是对象Position的x坐标,[3]是Y坐标。
[4]是构造对象时Place的名称。
如果[0]等于描述,那么也会创建带有描述的地方。
FileReader inFile = new FileReader("place.reg");
BufferedReader in = new BufferedReader(inFile);
String line;
while ((line = in.readLine()) != null) {
String[] tokens = line.split(",");
Category category = null;
String categoryName = tokens[1];
if (categoryName.equals("Bus")) {
category = transportCategory[0];
} else if (categoryName.equals("Underground")) {
category = transportCategory[1];
} else if (categoryName.equals("Train")) {
category = transportCategory[2];
} else if (categoryName.equals("None")) {
category = transportCategory[3];
}
String placeName = tokens[0];
int x = Integer.parseInt(tokens[2]);
int y = Integer.parseInt(tokens[3]);
Position pos = new Position(x, y);
String name = tokens[4];
if (placeName.equals("Named")) {
NamedPlace nPlace = new NamedPlace(pos, category, name);
add(nPlace);
picturePanel.add(nPlace);
nPlace.addMouseListener(placeMouseLis);
System.out.println("named place added: " +
nPlace.position().getX() + " , " + pos.getX());
} else if (placeName.equals("Described")) {
String description = tokens[5];
DescribedPlace dPlace = new DescribedPlace(pos,
category, name, description);
add(dPlace);
picturePanel.add(dPlace);
System.out.println("desc place was added");
}
}
// Iterator<Map.Entry<Position, Place>> iterator =
// allPlaces.entrySet().iterator();
// while(iterator.hasNext()){
// Place place = iterator.next().getValue();
// picturePanel.add(place);
}
inFile.close();
in.close();
现在我的问题是,当我添加Place对象时,会在彼此的顶部绘制出来。请注意,NamedPlace和DescribedPlace是超类Place的子类。
编辑:我通过执行picturePanel.repaint()解决了这个问题。和picturePanel.validate();答案 0 :(得分:0)
我是最大的白痴..我忘了做重画();和validate();读完所有对象后,在我的picturePanel上。