java - 在 Canvas 上看不到圆圈

标签 java canvas applet awt panel

我实在想不通,需要你的帮助。我创建了一个简单的 小程序。我有一个面板和一个 Canvas 。我在 Canvas 上画画。我添加 Canvas 到面板。我将面板添加到小程序中。我正在尝试在上面画一个圆圈 Canvas ,但我看不到它。如果我调整小程序的大小,我可以看到圆圈 在 Canvas 后面闪烁。请帮忙。

        import java.applet.*;
        import java.awt.*;


        public class TestCanvas extends Applet implements Runnable
        {
            Panel myPanel = new Panel();
            int x = 50;
            int y = 50;
            int width = 100;
            int height = 100;
            boolean startBall = false;

            Graphics bufferGraphics;
            Image offscreen;

            Thread t;

            public void init()
            {
                canvas.setSize(500,500);

                //canvas.setMaximumSize(new Dimension(500,500));
                //canvas.setMinimumSize(new Dimension(50,50));
                myPanel.add(canvas);
                add(myPanel);
                //For double buffering
                offscreen = createImage(canvas.getWidth(),canvas.getHeight());
                bufferGraphics = offscreen.getGraphics();

            }

            public void start()
            {
                t = new Thread();
                t.start();
                startBall = true;

            }

            public void stop()
            {
                t = null;
            }

            public void destroy()
            {
                t = null;
            }

            public void run()
            {
                for ( ; ; )
                {
                    try
                    {
                        canvas.repaint();
                        Thread.sleep(100);
                    }catch(InterruptedException e){}



                }
            }

            class myCanvas extends Canvas
            {
                private static final long serialVersionUID = 1L;

                public myCanvas()
                {
                    setBackground(Color.yellow);
                    setSize(500, 300);
                    //setBounds(0, 0, 500, 300);

                }   

            }

            myCanvas canvas = new myCanvas();

            public void paint(Graphics g)
            {
                g = canvas.getGraphics();
                bufferGraphics.clearRect(0,0,canvas.getWidth(), canvas.getHeight());
                bufferGraphics.setColor(Color.black);
                //x++;
                //y++;
                bufferGraphics.setColor(Color.black);
                bufferGraphics.fillOval(x, y, width, height);       
                g.drawImage(offscreen,0,0,null);        
            }

            public void update(Graphics g)
            {
                canvas.paint(g);
            }



        }

最佳答案

现在已经到了这样的阶段:我不会触及涉及 applet 或 AWT 的问题,除非提出问题的人对他们使用其中任何一个的原因给出合理的答复。 OTOH,您已经部分实现了这一点,所以这是一个为球设置动画的工作示例。

仔细查看您的代码和此代码之间的差异。

import java.applet.*;
import java.awt.*;

public class TestCanvas extends Applet implements Runnable {

    Panel myPanel = new Panel(new GridLayout());
    int x = 0;
    int y = 0;
    int width = 100;
    int height = 100;
    boolean startBall = false;
    myCanvas canvas = new myCanvas();
    Thread t;

    public void init() {
        myPanel.add(canvas);
        System.out.println("" + this.getLayout());
        /* A Single component added to a no args GridLayout will be stretched 
         to fill the avilable space. */
        this.setLayout(new GridLayout());
        add(myPanel);
        t = new Thread(this);
        t.start();
    }

    public void start() {
        t = new Thread();
        t.start();
        startBall = true;
    }

    public void stop() {
        t = null;
    }

    public void destroy() {
        t = null;
    }

    public void run() {
        for (;;) {
            try {
                canvas.repaint();
                Thread.sleep(100);
            } catch (InterruptedException e) {
            }
        }
    }

    class myCanvas extends Canvas {

        private static final long serialVersionUID = 1L;

        public myCanvas() {
            setBackground(Color.yellow);
        }

        @Override
        public void paint(Graphics g) {
            super.paint(g);
            g.clearRect(0, 0, getWidth(), getHeight());
            g.setColor(Color.black);
            x++;
            y++;
            g.setColor(Color.black);
            g.fillOval(x, y, width, height);
        }
    }
}

关于java - 在 Canvas 上看不到圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36273742/

相关文章:

javascript - 当尝试在鼠标按下时选择所有对象时,对象会自动移动位置(Fabric.JS)

Java 小程序尝试获取超出存档列表的内容

java - 如何从gradle生成的jar中排除配置文件

java - 返回缩写的 Get 方法

javascript - Angular 6 - 无法在 Canvas 上动态添加文本

Java applet 与 tomcat 服务器上的 servlet 通信

java - 测试 JCTerm,java applet 终端模拟器,可以在 Eclipse 中运行,但不能在浏览器中运行

java - 如何判断目录是否使用 Java 远程挂载

java - 如何用 Java 中的新输入替换文本文件的第一行?

javascript - 在 WebView javafx 中用 Canvas 打开 html 文件