GUI 对象不绘制

克里斯·K

我一直在这里寻找类似线程的答案,但我找不到我的代码有什么问题。
我正在尝试制作 agar.io 模拟器,但 agar 对象没有绘制。无论我做什么,食物都会吸引,但琼脂不会吸引。
琼脂类代码:

import java.awt.*;
import java.awt.event.*;

public class Agar {
    //instance field
    public static final int DEFAULT_SIZE = 1000, DEFAULT_X = 
    ArenaPanel.PANEL_WIDTH/2, DEFAULT_Y = ArenaPanel.PANEL_HEIGHT/2;

    private int x, y, size;

    private Color clr;

    public Agar(Color c) {
        x = DEFAULT_X;
        y = DEFAULT_Y;

        clr = c;
    }

    public void move() {
        //blank for now, not used yet
    }

    //grows by 10% width
    public void grow() {
        size += 10;
    }

    public void draw(Graphics fred) {
        fred.setColor(clr);
        fred.fillOval(0,0,size,size);

        fred.setColor(Color.black);
        fred.drawOval(0,0,size,size);
    }
}

面板类代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.ArrayList;

public class ArenaPanel extends JPanel {
    //instance field
    public static final int PANEL_WIDTH = 1000, PANEL_HEIGHT = 500;

    private ArrayList<Food> food;
    private Timer foodAdder;

    private Agar agar;

    public ArenaPanel() {
        //agar stuff
        agar = new Agar(getRandomColor());

        //food stuff
        food = new ArrayList<Food>();
        //add some initial food
        for (int i = 0; i < 50; i++)
            addRandomFood();

        //"this will last a while"
        foodAdder = new Timer(3000, new FoodAdder());
        foodAdder.start();

        //listeners
        addComponentListener(new ResizeListener());

        //more basic stuff
        setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
        setBackground(Color.white);
    }

    public void paintComponent(Graphics fred) {
        super.paintComponent(fred);

        agar.draw(fred);

        for (int i = 0; i < food.size(); i++)
            food.get(i).draw(fred);
    }

    //put it here so I can use it for both agar and food
    private Color getRandomColor() {
        int rand = (int)(Math.random()*7);
        Color c;

        switch (rand) {
            case 0:
            c = Color.red;
            break;
            case 1:
            c = Color.orange;
            break;
            case 2:
            c = Color.yellow;
            break;
            case 3:
            c = Color.green;
            break;
            case 4:
            c = Color.cyan;
            break;
            case 5:
            c = Color.blue;
            break;
            default:
            c = Color.pink;
        }

        return c;
    }

    private void addRandomFood() {
        int x = (int)(Math.random()*PANEL_WIDTH);
        int y = (int)(Math.random()*PANEL_HEIGHT);

        food.add(new Food(x,y,getRandomColor()));
    }

    private class FoodAdder implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            addRandomFood();

            repaint();
        }
    }

    private class ResizeListener extends ComponentAdapter {
        public void componentResized(ComponentEvent e) {
            setPreferredSize(getSize());
        }
    }
}

我尝试调试(将 System.out.println 命令放入 draw()、paintComponent()、agar 的构造函数中),实际上所有方法都运行正常。所以我想也许它只是没有出现,但即使我尝试将琼脂的颜色更改为位于 0,0 的黑色方块(这应该与彩色圆形食物形成鲜明对比),但它仍然没有显示。
这里可能有什么问题?

精神错乱

它的大小为零。调用方法至少增长一次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章