单击鼠标一次,就出现一个新JComponent,同时老的还在,请教以下代码怎么不对?

CFree 2002-05-04 08:31:17
import java.awt.*;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;

public class AddJComponent extends JApplet
{
JP jpObj=new JP();
StepNode sn=new StepNode();
ArrayList CollectionObj=new ArrayList();
StepNode temp1Obj=new StepNode();


int sx,sy,ex,ey;
boolean isDraw;


public void init()
{
getContentPane().add(jpObj);
isDraw=false;
}
class JP extends JPanel
{
JP()
{
this.setSize(new Dimension(800,600));
addMouseListener(new PanelMouseProcess());
}
public void addsn(int x,int y)
{

temp1Obj.posX=sx;
temp1Obj.posY=sy;
CollectionObj.add(temp1Obj);
for (int i=0;i<CollectionObj.size();i++)/**/
{
StepNode temp2Obj=(StepNode)CollectionObj.get(i);
add(temp2Obj);
temp2Obj.setLocation(temp2Obj.posX,temp2Obj.posY);
}
isDraw=true;
repaint();
}
class PanelMouseProcess extends MouseAdapter
{
public void mouseClicked(MouseEvent e)
{
sx=e.getX();
sy=e.getY();
addsn(e.getX(),e.getY());
}
}

}
class StepNode extends JComponent
{
int posX,posY;
public StepNode()
{
setSize(new Dimension(40,20));
setBorder(BorderFactory.createRaisedBevelBorder());
}
}
}


请帮忙调试一下,谢谢!
...全文
27 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CFree 2002-05-04
xioyoo(xioyoo):谢谢你的进一步解释
请来这里拿分
http://www.csdn.net/expert/topic/698/698546.xml?temp=.9496576
回复
肖尧19 2002-05-04
楼上的方法正确。
你的错误在于每次添加到CollectionObj中的是指向同一个StepNode的同一个
引用,因此虽然你的CollectionObj中添加了很多个StepNode,但是他们的X,Y
坐标全部会被赋值成鼠标最后一次点击的X,Y坐标,你看到的效果是只有一个
组件被绘出,其实有很多组件被绘出,只不过位置从叠了,只能看到一个。
解决的方法就是每次点击鼠标,调用addsn()方法时生成新的StepNode对象
回复
CFree 2002-05-04
一语道醒梦中人!
回复
FooSleeper 2002-05-04

StepNode temp1Obj=new StepNode();
放到
public void addsn(int x,int y)
里面。

回复
发动态
发帖子
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
社区公告
暂无公告