首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘制组件不是绘制椭圆

绘制组件不是绘制椭圆
EN

Stack Overflow用户
提问于 2017-05-06 07:11:01
回答 1查看 60关注 0票数 0

好的,我目前正在为一个项目制作一个蛇和梯子游戏,我遇到了一个以前从未遇到过的问题。我有一个名为Player的类,它是游戏板上的一个圆圈。

paintComponent方法应该经常打印true,但它没有

代码语言:javascript
复制
public class Player extends JComponent {
    private double playerX;
    private double playerY;
    private double diameter;
    private String playerColor;
    HashMap<String, Color> colorMap = new HashMap();

    public Player(String playerColor, double playerX, double playerY, double diameter) {
        this.playerColor = playerColor;
        this.playerX = playerY;
        this.playerY = playerY;
        this.diameter = diameter;
        setSize(getPreferredSize());
        setLocation((int) diameter, (int) diameter);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension((int) diameter * 2, (int) diameter * 2);
    }

    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        super.paintComponent(g2d);
        setDoubleBuffered(true);
        g2d.drawOval((int) playerX, (int) playerY, (int) diameter * 2, (int) diameter * 2);
        System.out.println(true);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-05-06 17:04:24

您不应该扩展JComponent来创建新组件,而应该通过覆盖paintComponent(..)来自定义绘制过程。

如果要创建具有自定义绘画方案的新组件,请使用JPanel并重写paint(..)方法。

代码语言:javascript
复制
public class Player extends JPanel {

    private static final long serialVersionUID = 1L;

    private double playerX;
    private double playerY;
    private double diameter;
    private String playerColor;
    HashMap<String, Color> colorMap = new HashMap<>();

    public Player(String playerColor, double playerX, double playerY, double diameter) {
        this.playerColor = playerColor;
        this.playerX = playerY;
        this.playerY = playerY;
        this.diameter = diameter;
        setSize(getPreferredSize());
        setLocation((int) diameter, (int) diameter);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension((int) diameter * 2, (int) diameter * 2);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;
        setDoubleBuffered(true);
        g2d.drawOval((int) playerX, (int) playerY, (int) diameter * 2, (int) diameter * 2);
        System.out.println(true);
    }
}

更多信息here

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

https://stackoverflow.com/questions/43814940

复制
相关文章

相似问题

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