2

我想我将从给我带来问题的代码开始。

class AnimationPanel extends JPanel
{   
    OfficeLoad load;
    Timer timer = new Timer();

    private static final long serialVersionUID = 1L;
    public AnimationPanel()
    {
        setBackground(new Color(240, 240, 240));
        setBorder(null);
        setOpaque(false);
        setBounds(10, 143, 400, 21);
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        load  = new OfficeLoad(g);
    }
    ...
    }

...

final Color WHITE = Color.WHITE;
public OfficeLoad(Graphics g)
{
    Graphics2D g2 = (Graphics2D)g.create();

    g2.setPaint(WHITE);
    g2.fill(new Ellipse2D.Double(30, 1, 5, 5));
    g.fillOval(40, 1, 5, 5);
    g.fillOval(50, 1, 5, 5);
    g.fillOval(60, 1, 5, 5);
    g.fillOval(70, 1, 5, 5);
    g.setColor(new Color(0, 102, 51));
    g.fillRect(0, 0, 10, 21);
}

当我使用g.fillOval()和使用它时g2.fill(new Ellipse2D()),它都变成了一个正方形。只是为了一些额外的信息,我当然只是为了好玩,尝试在启动时复制 excel 2013 启动屏幕。这部分用于“Excel”下方的加载点。我已经用 gif 制作了,这要容易得多,但我的朋友挑战我使用颜料、重画等等。但我不能真正做到这一点,除非它们变成圆形而不是正方形......任何帮助将不胜感激。:)

4

2 回答 2

2

谢谢哈利克斯!_ :D 对于没有看他评论的每个人,Halex 给出了以下答案。

当您启用抗锯齿时它是否有效g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

它做了。谢谢!:D

于 2013-04-03T11:17:38.457 回答
1

首先,我建议不要在每次绘画时都创建新的 OfficeLoad 对象,您可以保存 officeload 对象或在 OfficeLoad 中创建一个静态 void,这样您就根本不需要该对象。

你也需要抗锯齿

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
于 2013-04-03T11:22:42.380 回答