首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >GUI对象无法绘制

GUI对象无法绘制
EN

Stack Overflow用户
提问于 2018-06-10 06:47:48
回答 1查看 31关注 0票数 0

我一直在这里寻找类似的答案,但我找不到我的代码出了什么问题。

我正在尝试制作一个agar.io模拟器,但是琼脂对象不能绘制。不管我怎么做,食物会吸引人,但琼脂不会吸引人。

琼脂类编码:

代码语言:javascript
复制
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);
    }
}

Panel类代码:

代码语言:javascript
复制
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(),琼脂的构造函数中),实际上所有方法都运行正常。所以我想它可能只是没有显示出来,但即使当我尝试将琼脂的颜色改为黑色正方形(这应该与彩色圆形食物形成很大的对比)位于0,0,但它仍然没有显示。

这里会有什么问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 06:52:06

它的尺寸为零。调用方法至少增长一次

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50779166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档