Кнопка Java не работает - PullRequest
       21

Кнопка Java не работает

0 голосов
/ 24 января 2011

Кнопка запускает событие, но оно не отображается. Он создает новые круги, но не рисует новые круги. Есть что-то, чем я не занимаюсь? (первый 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 ]

3 голосов
/ 24 января 2011

Вам нужно позвонить repaint(), чтобы перерисовать новые круги после их создания.

Кроме того, он не имеет прямого отношения к вашему вопросу, но action() устарел - вместо него используйте слушатель действий .

3 голосов
/ 24 января 2011

Я не вижу, где вы добавляете ActionListener к своей кнопке, и без этого Button не сможет связать свое нажатие с каким-либо действием кода. Возможно, я чего-то упускаю ... пожалуйста, скажите мне, что должно происходить при нажатии кнопки, и какой код вызывает это для вас?

Я предлагаю, если возможно, кодировать не на AWT, а на Swing, который гораздо более надежен и гибок. Также доступно больше учебных пособий для него и больше опыта здесь и на других сайтах по сравнению с AWT.

...