Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 程序执行过程中ArrayList中的添加项_Java_Arraylist - Fatal编程技术网

Java 程序执行过程中ArrayList中的添加项

Java 程序执行过程中ArrayList中的添加项,java,arraylist,Java,Arraylist,按下按钮后,我需要进入“createCircles”方法的另一项。因为我用画布画圆,从这个数组列表。所以我做了下面的事情。但是当它运行时,所以当你按下按钮时,什么也不会发生。我的问题是,如果它被正确地注册,我的附加项目将被添加到盒子中 public class krouzky extends View { final Paint mMalovani; ArrayList<Circle> mCircles; private boolean KontrolerV

按下按钮后,我需要进入“createCircles”方法的另一项。因为我用画布画圆,从这个数组列表。所以我做了下面的事情。但是当它运行时,所以当你按下按钮时,什么也不会发生。我的问题是,如果它被正确地注册,我的附加项目将被添加到盒子中

public class krouzky extends View {
    final Paint mMalovani;
    ArrayList<Circle> mCircles;

    private boolean KontrolerVykreslovani = true;

    public krouzky(Context context, AttributeSet atrs) {
        super(context, atrs);

        mMalovani = new Paint();
        mMalovani.setColor(Color.RED);
        mMalovani.setAntiAlias(true);

        createCircles();

    }

    private void createCircles() {
        mCircles = new ArrayList<Circle>();
        mCircles.add(new Circle(120, 30, 7));

    }

    public void Pridani_kruhu() {
        Button btn2 = (Button) findViewById(R.id.button3);
        btn2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                createCircles(v);
            }
        });
    }      

    private void createCircles(View v) {
        mCircles.add(new Circle(120, 30, 15));
    }
公共类krouzky扩展视图{
最终油漆:mMalovani;
ArrayList mCircles;
私有布尔值KontrolerVykreslovani=true;
公共krouzky(上下文,属性集atrs){
超级(上下文,atrs);
mMalovani=新油漆();
mMalovani.setColor(颜色:红色);
mMalovani.setAntiAlias(真);
createCircles();
}
私有void createCircles(){
mCircles=newarraylist();
mCircles.add(新圆圈(120,30,7));
}
公共无效Pridani_kruhu(){
按钮btn2=(按钮)findViewById(R.id.button3);
btn2.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
(v);
}
});
}      
专用空心圆(视图v){
mCircles.add(新圆圈(120,30,15));
}
如果在程序开始之前有一个项目要添加,则方法如下所示,因此他根据计划绘制两个圆

private void createCircles() {
    mCircles = new ArrayList<Circle>();
    mCircles.add(new Circle(120, 30, 7));
    mCircles.add(new Circle(130, 30, 12));
}
private void createCircles(){
mCircles=newarraylist();
mCircles.add(新圆圈(120,30,7));
mCircles.add(新圆圈(130,30,12));
}
谢谢你的建议

完全的活力就在这里

public class krouzky extends View {

final Paint mMalovani;  


ArrayList<Circle> mCircles;

private boolean KontrolerVykreslovani = true;

public krouzky(Context context, AttributeSet atrs) {
    super(context, atrs);

    mMalovani = new Paint();
    mMalovani.setColor(Color.RED);
    mMalovani.setAntiAlias(true);

    createCircles();
}

private void createCircles() {
    mCircles = new ArrayList<Circle>();

    mCircles.add(new Circle(120, 30, 7));
}



public void Pridani_kruhu() {

    Button btn2 = (Button) findViewById(R.id.button3);

    btn2.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            createCircles(v);
        }
    });
    }          

private void createCircles(View v) {    
    mCircles.add(new Circle(120, 30, 15));
}


public void draw(Canvas canvas) {
    // pokud je mDrawinEnabled "true" tak udělá .....
    if ( KontrolerVykreslovani ) {
        //přiřazení hodnot do proměnných width a height
        final int width = canvas.getWidth();
        final int height = canvas.getHeight();

        kresleníKruhu(canvas);



        invalidate();
    }
}

public boolean onTouchEvent(MotionEvent event) {

    float x = event.getX();
    float y = event.getY();

    Circle cr = findCircleClosestToTouchEvent(x, y);



    float dtcr = euclidDist(cr.getCurrentX(), cr.getCurrentY(), x, y);

        handleTouchedCircle(event, cr);

    return true;
}

private void kresleníKruhu(Canvas canvas) {
    for (Circle c : mCircles) {

        canvas.drawCircle(c.getCurrentX(), c.getCurrentY(), c.getRadius(),
                mMalovani);
    }
}



private static float euclidDist(float x1, float y1, float x2, float y2) {
    return android.util.FloatMath.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1)
            * (y2 - y1));
}


private Circle findCircleClosestToTouchEvent(float x, float y) {

    Circle c = mCircles.get(0);

    float dist = euclidDist(c.getCurrentX(), c.getCurrentY(), x, y);        
    float tempdist = 0;
    for (Circle cr : mCircles) {
        tempdist = euclidDist(cr.getCurrentX(), cr.getCurrentY(), x, y);
        if (tempdist < dist) {
            c = cr;
            dist = tempdist;
        }
    }
    return c;
}

private void handleTouchedCircle(MotionEvent me, Circle c) {

    final float me_x = me.getX();
    final float me_y = me.getY();
    final int action = me.getAction();

    switch (action) {
    case MotionEvent.ACTION_DOWN:
        c.setActionDownX(c.getCurrentX());
        c.setActionDownY(c.getCurrentY());
        c.setActionMoveOffsetX(me_x);
        c.setActionMoveOffsetY(me_y);
        break;
    case MotionEvent.ACTION_MOVE:
    case MotionEvent.ACTION_UP:
        c.setCurrentX(c.getActionDownX() + me_x - c.getActionMoveOffsetX());
        c.setCurrentY(c.getActionDownY() + me_y - c.getActionMoveOffsetY());
        break;
    case MotionEvent.ACTION_CANCEL:
        c.restoreStartPosition();
        break;
    }
}


final void MuzemeVykreslovat() { KontrolerVykreslovani = true; }

final void NemuzemeVykreslovat() { KontrolerVykreslovani = false; }
公共类krouzky扩展视图{
最终油漆:mMalovani;
ArrayList mCircles;
私有布尔值KontrolerVykreslovani=true;
公共krouzky(上下文,属性集atrs){
超级(上下文,atrs);
mMalovani=新油漆();
mMalovani.setColor(颜色:红色);
mMalovani.setAntiAlias(真);
createCircles();
}
私有void createCircles(){
mCircles=newarraylist();
mCircles.add(新圆圈(120,30,7));
}
公共无效Pridani_kruhu(){
按钮btn2=(按钮)findViewById(R.id.button3);
btn2.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
(v);
}
});
}          
专用空心圆(视图v){
mCircles.add(新圆圈(120,30,15));
}
公共空白绘制(画布){
//pokud je mDrawinEnabled“真正的”tak udělá。。。。。
if(KontrolerVykreslovani){
//přiřazeníhodnot do proměnných width a height
final int width=canvas.getWidth();
final int height=canvas.getHeight();
kresleníKruhu(帆布);
使无效();
}
}
公共布尔onTouchEvent(运动事件){
float x=event.getX();
float y=event.getY();
圆cr=findCircleClosestToTouchEvent(x,y);
float dtcr=euclidDist(cr.getCurrentX(),cr.getCurrentY(),x,y);
handleTouchedCircle(事件,cr);
返回true;
}
私人void kresleníKruhu(帆布){
用于(圆c:mCircles){
canvas.drawCircle(c.getCurrentX()、c.getCurrentY()、c.getRadius()、c,
姆马洛瓦尼);
}
}
专用静态浮点欧几里德(浮点x1、浮点y1、浮点x2、浮点y2){
返回android.util.FloatMath.sqrt((x2-x1)*(x2-x1)+(y2-y1)
*(y2-y1));
}
专用圆findCircleClosestToTouchEvent(浮动x,浮动y){
圆c=mCircles.get(0);
浮点距离=欧几里德距离(c.getCurrentX(),c.getCurrentY(),x,y);
浮点tempdist=0;
用于(圆形cr:mCircles){
tempdist=euclidDist(cr.getCurrentX(),cr.getCurrentY(),x,y);
if(tempdist
}

}

只要ArrayList为空,就应该实例化它


此外,如果您正在通过查看此图形用户界面来测试此功能,则圆圈可能正在堆叠。这意味着它可能会使圆很好,但同时不会显示它们,因为它们都具有
(120,30,7)
的属性。考虑将它们随机放置,或者设置在不同属性的不同位置,这样就知道它们不是堆叠。

您正在正确地添加到ARARYLIST。但是,您将视图传递给createCircles(),但对其不做任何操作。此外,您没有向我们显示视图是什么。在某一点上,你必须画圆圈。我没看到你在任何地方画圆圈。您有这个绘画对象,但似乎没有使用它。我想你需要发布更多的信息。我是这样做的,但结果是一样的。每个圆都应该是可见的,因为所有的圆都是可移动的。你的按钮是在JPanel中还是你正在画的任何东西?另外,您是否测试了按钮的功能?这有更多我习惯的ActionListener类型,但您可能正在使用我不熟悉的东西(我已经有一段时间没有做过非J2EE GUI工作了)是的,我的按钮还可以。我用吐司文本测试。(谢谢你的小费)
private void createCircles() {
    mCircles = new ArrayList<Circle>();

    mCircles.add(new Circle(120, 30, 7));
}
mCircles.add(new Circle(120, 30, 7));