【发布时间】:2016-07-16 09:14:52
【问题描述】:
我真的想不通,我需要你的帮助。我创建了一个简单的 小程序。我有一个面板和一个画布。我在画布上画画。我添加画布 到面板。我将面板添加到小程序。我正在尝试在上面画一个圆圈 画布,但我看不到它。如果我调整小程序的大小,我可以看到圆圈 在画布后面闪烁。请帮忙。
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);
}
}
【问题讨论】:
-
你已经定义了一个对象和一堆函数。你怎么称呼这些物品?
-
让我们开始吧;小程序是一种死技术,几乎所有浏览器都没有主动阻止它们,并且 Java 插件停止了; awt 基本上在 16 年前就被 swing 取代了,所以除非你打算使用 BufferStrategy,否则你真的不需要使用基于 awt 的组件,swing 组件默认也是双缓冲的。现在,说了这么多,您尝试双缓冲通常是错误的,您应该使用 BufferedImage,而不是您所做的。您的
canvas实际上并没有出现在屏幕上,但这就是您尝试绘制的内容 -
你的教授需要进入现代时代(抱歉),swing 和 awt 使用完全不同的绘画方法,我个人在 16 多年的专业 GUI 开发中从未使用过基于 awt 的框架。您需要知道,swing 是由 awt 支持的,但通常仅此而已。然而,它并没有否定小程序是一种死技术的事实,尽管我可能不喜欢它,Swings 的日子可能已经屈指可数了,JavaFX 将是一个更好的起点(如果不是 html5),你尝试双缓冲是错误的:P(对于 awt 和 Swing)
-
显示你的教授Why CS teachers should stop teaching Java Applets。您正在学习实际上应该避免的材料。说“如果你知道 AWT,你就可以学习 Swing 和所有取代它的东西”就像说“较新的框架不包含任何新东西”,这是错误的。你真的应该避免使用过时的系统。
-
@Andrew Thompson。谢谢安德鲁!我非常感谢!我会给他看那篇文章。他的反应可能只是滑稽!
标签: java canvas applet awt panel