0

こんにちは私は右マウスをトリガーするときに左マウスをクリックして描画するアプリケーションを持っていますそれはArrayListに移動して新しいオブジェクトを作成する必要があります。もう一度左マウスをクリックし始めると、新しいオブジェクトを続けて他のオブジェクトを表示し続ける必要があります。私の問題は、古いオブジェクトが消えることです。誰かが私が忘れたものを見ることができますか?

これがコードです

Drawing draw; // class definition
private ArrayList<Drawing> tekening = new ArrayList<Drawing>();

public DrawingPanel() {
    setBackground(Color.WHITE); // zorg voor een witte achtergrond.
    this.addMouseListener(this); // control de mouselistener
    draw = new Drawing(color);
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    draw.draw(g);
    repaint();
}

@Override
public void mouseClicked(MouseEvent e) {

    if(e.getButton() == MouseEvent.BUTTON1) {
        Point k = new Point(e.getX(), e.getY());
        draw.addPoint(k);
        System.out.println("punt gezet op " + k);
    }
    if(e.getButton() == MouseEvent.BUTTON3) {
        tekening.add(draw);
        color = new Color(r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0, r.nextInt(255 - 0 + 1) + 0);
        //System.out.println("new color " + color);
        draw.setColor(color);
        draw = new Drawing(color);
    }
}

paintcomponentのforeachループを忘れました。

        for(Drawing draw : tekening) {
        draw.draw(g);
    }
4

2 に答える 2

0

これらの行:

draw.setColor(color);
draw = new Drawing(color);

「古い」描画オブジェクトへの参照を破棄しています。両方を維持したい場合は、アプリケーションに古いものと新しいものの概念を作成する必要があります。たぶんMap<Drawing,List<Drawing>

于 2012-12-14T15:51:52.600 に答える
0

問題はpaintComponent(Graphics g)方法にあります。その中で、現在のdrawオブジェクトのみを再描画します。マウスの右ボタンで 1 つを完了し、新しいオブジェクトを初期化すると、以前のオブジェクトに関する情報が含まれていないため、何も描画されません。paintComponent(Graphics g)次のようになります。

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    for(Drawing dr : tekening) {
        dr.draw(g);
    }
    repaint();
}

Drawingsこれは、それらのそれぞれをペイントするすべてをループします。

于 2012-12-14T15:52:56.560 に答える