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对象。当您用鼠标右键完成一个并初始化一个新对象时,它不包含有关先前对象的信息,因此不会绘制任何内容。你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 回答