2

我在重绘期间绘制多条线时遇到问题。代码如下:

public void paintComponent(Graphics g){
    Graphics2D g2d = (Graphics2D) g;

    Map<Device, Device> devMap = matchEncDec();
    if(devMap != null){
        Iterator<?> it = devMap.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry<Device, Device> pair =  (Entry<Device, Device>) it.next();
            it.remove();

            g2d.setColor(Color.BLUE);
            g2d.drawLine(pair.getKey().getLocationOnScreen().x + 150, pair.getKey().getLocationOnScreen().y, 
                    pair.getValue().getLocationOnScreen().x + 150, pair.getValue().getLocationOnScreen().y);

            g2d.drawLine(50, 50, 500, 550);
        }
    }
}

它只为 HashMap 中的最后一对和我添加的测试线画线。提前感谢您的帮助。

4

1 回答 1

2

不要从迭代器中删除该对。

it.remove();

如果它是一个临时的 hashmap,这是一个不必要的步骤,如果它是一个重用的 hashmap,这是一个关键问题。这将从基础哈希图中删除该项目。因此,如果matchEncDec()返回一个正在重用的 hashmap,您将只绘制每行一次,因为一旦绘制,该对将从 hashmap 中删除。

查看该matchEncDec()方法会很有帮助,但我只是检查您是否在每次调用时返回对相同哈希图的引用。如果是这样的话,那么这绝对是问题所在。

于 2012-06-21T12:03:56.423 回答