Java 如何从Main刷新JApplet?

Java 如何从Main刷新JApplet?,java,swing,paint,graphics2d,japplet,Java,Swing,Paint,Graphics2d,Japplet,我正在努力学习2D图形。下面的代码绘制了两个旋转的轮子。为了让它们刷新,我最后在paint方法中插入了repaint(1000),但我知道它会在不需要的时候进行绘制 public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; for(int angle=0; angle<360; angle+=90){ g2.setColor(blue);

我正在努力学习2D图形。下面的代码绘制了两个旋转的轮子。为了让它们刷新,我最后在paint方法中插入了repaint(1000),但我知道它会在不需要的时候进行绘制

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;

        for(int angle=0; angle<360; angle+=90){
            g2.setColor(blue);
            g2.fillArc(100,100,200,200,theta1 + angle,45);
            g2.setColor(red);
            g2.fillArc(100,100,200,200,theta1 + angle + 45,45);
        }

        for(int angle=0; angle<360; angle+=30){
            g2.setColor(green);
            g2.fillArc(250,250,250,250,angle + theta2,15);
            g2.setColor(yellow);
            g2.fillArc(250,250,250,250,angle + theta2 + 15,15);
        }

//        repaint(1000);
   }

    public static void main(String s[]) {
        JFrame f = new JFrame("ShapesDemo2D");
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {System.exit(0);}
        });
        JApplet applet = new ShapesDemo2D();
        f.getContentPane().add("Center", applet);
        applet.init();
        f.pack();
        f.setSize(new Dimension(800,800));
        f.setVisible(true);

        while(true) {
            theta2 += 5;
            theta1 -= 2;

            f.repaint(1000);

            try {
                Thread.sleep(100);
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    }
public void绘制(图形g){
图形2d g2=(图形2d)g;

对于(int angle=0;angle而言,通读会对您有利

我还想看看


它们都在Swing中显示动画原理和自定义图形,您是为JFrame而不是JApplet编写的,尽管它们都可以实现WindowListener,并且都可以访问绘图(图形g)方法。

请阅读,和。我还想看看小程序是否应该显示在浏览器或小程序查看器中……为什么您要在
JFrame
上显示它,和/或如果您已经有了一个框架,为什么要使用
JAppelt
?我已经实现了自定义绘画演示[链接]我已经在面板上添加了角度变量,可以旋转轮子。我应该在面板内部创建一条线来推进角度,还是可以将其放在外部,在这种情况下,我将如何引用角度?创建一个方法来设置角度?这要视情况而定。我可能只会有一个“动画“线程,因为有两个线程会相互交叉,您会遇到冲突。问题是,何时以及如何更新。您不应该从EDT以外的任何线程更新UI。在这种情况下,我可能会使用分离的模型,动画线程将此模型提供给包含要更新的值的UI,但UI会对其进行快照。”(这样,如果动画线程正在更新它,我们就不会得到脏的读取)。但是,在您的例子中,您可以简单地使用javax.swing.timer之类的东西。在oracle绘图演示中,MyPanel构造函数为其方形鼠标光标设置鼠标侦听器。其moveSquare使用repaint().My Runnable animate也由构造函数实例化。它在JPanel中运行并更新静态角度变量,但在我的animate中不接受repaint(),即使它在moveSquare中。正在放置repaint(1000)在绘画中,方法是有效的,但这与我在原始问题中遇到的小程序问题相同。我已经学习了很多,但我看不出我在哪里取得了明显的进步。当然。我应该如何发送它?在早期,我在下面?你粘贴到pastebin或类似的东西。对于一个6个月大的孩子来说,永远不会提前