Java按钮不起作用

时间:2011-01-24 03:52:33

标签: java button action applet

按钮正在触发事件,但它没有显示。它会创建新的圆圈,但不会绘制新的圆圈。有什么我不做的事吗? (第一个java小程序)。这可能是我想念的蠢事......

import java.applet.*;


    public class CircleApp extends Applet {

        public circle[] circles;
        public Button regen;

        public CircleApp(){
        }

        public void init()
        {
            this.setSize(400, 400);
            genCircles(getWidth(), getHeight());
            regen = new Button("New Circles");
            add(regen);
        }

        public boolean action(Event e, Object args)
        {
            genCircles(getWidth(), getHeight());
            return true;
        }

        public void genCircles(int wid, int hei)
        {
            circles = new circle[20];
            Random gen = new Random();
            for (int i = 0; i < 20; i++)
            {
                int x = gen.nextInt(wid);
                int y = gen.nextInt(hei);
                int rx = Math.min(x, wid - x);
                int ry = Math.min(y, hei - y);
                int r = Math.min(rx, ry);

                circles[i] = new circle(new Point(x, y), gen.nextInt(r));
            }

            for (int i = 0; i < 20; i++)
            {
                for (int j = i; j < 20; j++)
                {
                    if (circles[i].intersects(circles[j]))
                    {
                        circles[i].intersects = true;
                        break;
                    }
                }
            }
        }

        public void paint(Graphics g)
        {
            for (int i = 0; i < 20; i++)
            {
                g.setColor((circles[i].intersects) ? Color.blue : Color.magenta);
                g.drawOval(circles[i].location.x,
                        circles[i].location.y,
                        circles[i].radius,
                        circles[i].radius);
            }
        }
    }

import java.awt.Point;


public class circle {
    public Point location;
    public int radius;
    public boolean intersects;

    public circle(Point h, int radius)
    {
        this.location = h;
        this.radius = radius;
    }
    public circle()
    {
        this(new Point(0, 0), 1);
    }
    public boolean intersects(circle other)
    {
        return (this.location.distance(other.location) <
                (double)(this.radius + other.radius));
    }
}

感谢您的帮助!!

2 个答案:

答案 0 :(得分:3)

我没有看到您在按钮上添加ActionListener的位置,如果没有这个,Button将无法将其按下与任何代码操作相关联。也许我错过了一些东西......请告诉我按下按钮时应该发生什么,以及代码是什么代码?

我建议你尽可能不用AWT编码,而是用Swing编写代码,这样可以更加健壮和灵活。此外,还有更多可用的教程,以及与AWT相比在这里和其他网站上的更多专业知识。

答案 1 :(得分:3)

生成后,您需要致电repaint()重绘新圈子。

此外,与您的问题没有直接关系,但{@ 3}}已被弃用 - 请改为使用按钮上的action()