簡體   English   中英

繪制零部件不繪制橢圓形

[英]Paint Component Not Drawing Oval

好的,所以我目前正在為一個項目制作蛇梯游戲,並且遇到了一個我從未遇到過的問題。 我有一個叫做Player的類,它將在游戲板上是一個圓圈。

paintComponent方法應該不斷地打印true,但不是

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);
    }
}

您不應擴展JComponent來創建新的組件,而應通過重寫paintComponent(..)來自定義繪制過程。

如果要使用其自定義繪畫方案創建一個新組件,請使用JPanel並重寫paint(..)方法。

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);
    }
}

更多信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM