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();

これは、一時的なハッシュマップの場合は不要な手順であり、再利用されたハッシュマップの場合は重大な問題です。これにより、基になるハッシュマップからアイテムが削除されます。したがって、matchEncDec()が再利用されているハッシュマップを返す場合、ペアがペイントされるとハッシュマップから削除されるため、各行を1回だけペイントします。

メソッドを確認することは役に立ちますがmatchEncDec()、呼び出しごとに同じハッシュマップへの参照を返しているかどうかを確認するだけです。その場合、これは間違いなく問題です。

于 2012-06-21T12:03:56.423 に答える