你好我有一个应用程序,我在点击鼠标左键时,触发右键鼠标需要进入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);
}
答案 0 :(得分:0)
这些行:
draw.setColor(color);
draw = new Drawing(color);
您正在销毁对“旧”绘图对象的引用。如果你想要两者都留在那里,你需要在你的应用程序中创建一些新旧概念。也许是Map<Drawing,List<Drawing>
答案 1 :(得分: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
画出每一个。