Java 绘制圆对象后将其传递给Arraylist
/*您好,我正在开发这个程序,该程序要求我使用PaintComponent方法在Jpanel上绘制圆 到目前为止,我的圆圈出现了,但我需要跟踪它们,所以我决定使用Arraylist添加它们。每次鼠标单击都会出现一个新的圆,但我的Arraylist仅显示当前的圆对象,而不是新单击后的上一个对象。我已经在这里看到了类似的问题,但似乎没有什么对我有效,接下来是我的代码*/Java 绘制圆对象后将其传递给Arraylist,java,swing,arraylist,Java,Swing,Arraylist,/*您好,我正在开发这个程序,该程序要求我使用PaintComponent方法在Jpanel上绘制圆 到目前为止,我的圆圈出现了,但我需要跟踪它们,所以我决定使用Arraylist添加它们。每次鼠标单击都会出现一个新的圆,但我的Arraylist仅显示当前的圆对象,而不是新单击后的上一个对象。我已经在这里看到了类似的问题,但似乎没有什么对我有效,接下来是我的代码*/ pane_main.add(myCircle,BorderLayout.CENTER); myCi
pane_main.add(myCircle,BorderLayout.CENTER);
myCircle.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e){
xstart= e.getX();
ystart = e.getY();
radius = (int) (Math.random()*100);
frame1.repaint();
}
public void mouseReleased(MouseEvent e){
xend = e.getX();
yend = e.getY();
if (xend < xstart) { int tmp = xstart; xstart = xend; xend = tmp; }
if (yend < ystart) { int tmp = ystart; ystart = yend; yend = tmp; }
Circle cr = new Circle(xcenter,ycenter,radius);
circleList.add(cr);//adding to list
}
});
myCircle.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e){
if (Trackmouse){
int x = e.getX();
int y = e.getY();
printMsg("(" + x + ", " + y + ")");
}
}
});
frame1.setVisible(true);
}
//the class that has paint component
public class Circle extends JPanel {
public Circle(){
}
public Circle(int x,int y,int radius){
}
public int getCenterX(){
return xstart - radius;
}
public int getCenterY(){
return ystart - radius;
}
public int getRadius(){
return radius;
}
public void paintComponent(Graphics g) {
int red = (int)(256*Math.random());
int green = (int)(256*Math.random());
int blue = (int)(256*Math.random());
int width = this.getWidth();
int height = this.getHeight();
printMsg("H = " + height + ", w = " + width);
for (Circle circle: circleList){
int count = 1;
g.setColor(new Color(red, green, blue));
printMsg("Colors are: " + red + " - " + green + " - " + blue );
g.fillOval(getCenterX(),getCenterY(),getRadius() *2,getRadius() *2);
System.out.println("For circle object " + count + ": ");
System.out.println("Center coordinates are: (" + circle.getCenterX() + " ," + circle.getCenterY()+ " )");
System.out.println("Radius is: " + circle.getRadius());
++ count ;
}
}
}
}
pane_main.add(myCircle,BorderLayout.CENTER);
myCircle.addMouseListener(新的MouseAdapter(){
公共无效鼠标按下(MouseEvent e){
xstart=e.getX();
ystart=e.getY();
半径=(int)(Math.random()*100);
frame1.repaint();
}
公共无效MouseEvent(MouseEvent e){
xend=e.getX();
yend=e.getY();
如果(xend
/*
H=405,w=584
颜色为:17-96-230
对于圆形对象1:
中心坐标为:(202,94)
半径为:25
H=405,w=584
颜色是:78-137-123
对于圆形对象1:
中心坐标为:(97289)
半径为:5
颜色是:78-137-123
对于圆形对象1:
中心坐标为:(97289)
半径为:5
这是运行它的一个示例输出,第一次圆的半径是25,第二次圆的半径是5,但它显示了两次结果,而不是以前的和当前的结果,任何帮助或指导都将不胜感激,谢谢*/ 我已经在这里看过了类似的问题,-那么你怎么会错过这个:昨天刚刚问过的问题?这里的建议也适用于您的代码。你的代码结构是错误的,需要修正。我已经在这里看过了类似的问题,-那么你怎么会错过这个:昨天刚刚问过的问题?这里的建议也适用于您的代码。代码的结构错误,需要修复。