我实在想不通,需要你的帮助。我创建了一个简单的 小程序。我有一个面板和一个 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/