从文本文件中读取对象时处理错误,为什么?

时间:2017-05-19 16:17:48

标签: java

我从一个存储在单独行上的文本文件中读取对象(字符串,但我将它们转换为对象)。

编辑:我的问题是当对象被添加到面板时,对象会在彼此之上被拉出来。对象有自己独立的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();

1 个答案:

答案 0 :(得分:0)

我是最大的白痴..我忘了做重画();和validate();读完所有对象后,在我的picturePanel上。