3个回答
展开全部
从词源可以看出
Canvas,麻布->画布->画油画的画板。
Panel 小块布->块版->面板、墙板、地板
Canvas,直接继承自Component组件,主要用于绘图,没有控件,更原始
Panel,继承自Container容器,主要用于镶嵌在其他控件里面当面板。
由于Java SE版的Canvas和Panel都继承自Component,共用Component的paint(Graphics g)
方式绘制自己的内容。由于使用同一个Graphic类,所以那些drawXXX都一致。
绘制的方式一样,2者的绘制速度就没大区别,
Canvas更适合画全屏的、没有控件的情形。像手机上JavaME就主要用Canvas
Panel适合嵌入到其他控件中使用。
Canvas,麻布->画布->画油画的画板。
Panel 小块布->块版->面板、墙板、地板
Canvas,直接继承自Component组件,主要用于绘图,没有控件,更原始
Panel,继承自Container容器,主要用于镶嵌在其他控件里面当面板。
由于Java SE版的Canvas和Panel都继承自Component,共用Component的paint(Graphics g)
方式绘制自己的内容。由于使用同一个Graphic类,所以那些drawXXX都一致。
绘制的方式一样,2者的绘制速度就没大区别,
Canvas更适合画全屏的、没有控件的情形。像手机上JavaME就主要用Canvas
Panel适合嵌入到其他控件中使用。
展开全部
简单理解就是一个画布
你通过获取这个画布的画笔(Graphic)对象,可以在画布上画点线框等等图形,也可以输出文本
你通过获取这个画布的画笔(Graphic)对象,可以在画布上画点线框等等图形,也可以输出文本
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我修改了一下代码
package test;
import java.awt.*;
import java.awt.event.*;
public class Test {
public static void main(String args[]) {
MyFrame f = new MyFrame();
f.setBounds(10, 10, 500, 500);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyFrame extends Frame implements Runnable {
Thread Roval, Boval;
MyCanvas red, blue;
double t = 0;
MyFrame() {
Roval = new Thread(this);
Boval = new Thread(this);
red = new MyCanvas(Color.red);
blue = new MyCanvas(Color.blue);
Panel p=new Panel();
p.setLayout(new FlowLayout());
this.setLayout(new BorderLayout());
this.add(p,BorderLayout.CENTER);
//setLayout(null);
p.add(red);
p.add(blue);
// red.setLocation(60, 100);
// blue.setLocation(60, 100);
Roval.start();
Boval.start();
}
public void run() {
while (true) {
t = t + 0.2;
if (t > 20)
t = 0;
if (Thread.currentThread().equals(Roval)) {
//System.out.print("Roval");
int x = 60;
int h = (int) (1.0 / 2 * t * t * 3.8) + 60;
red.setLocation(x, h);
try {
Roval.sleep(50);
} catch (InterruptedException e) {
}
}
else if (Thread.currentThread().equals(Boval)) {
//System.out.print("Boval");
int x = 60 + (int) (26 * t);
int h = (int) (1.0 / 2 * t * t * 3.8) + 60;
blue.setLocation(x, h);
try {
Boval.sleep(50);
} catch (InterruptedException e) {
}
}
}
}
}
class MyCanvas extends Canvas {
Color c;
MyCanvas(Color c) {
this.setPreferredSize(new Dimension(20,20));
this.c = c;
this.setBackground(c);
}
public void Paint(Graphics g) {
super.paint(g);
g.setColor(c);
System.out.print(c.getAlpha()+"");
g.fillRect(0, 0, 20, 20);
}
}
package test;
import java.awt.*;
import java.awt.event.*;
public class Test {
public static void main(String args[]) {
MyFrame f = new MyFrame();
f.setBounds(10, 10, 500, 500);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyFrame extends Frame implements Runnable {
Thread Roval, Boval;
MyCanvas red, blue;
double t = 0;
MyFrame() {
Roval = new Thread(this);
Boval = new Thread(this);
red = new MyCanvas(Color.red);
blue = new MyCanvas(Color.blue);
Panel p=new Panel();
p.setLayout(new FlowLayout());
this.setLayout(new BorderLayout());
this.add(p,BorderLayout.CENTER);
//setLayout(null);
p.add(red);
p.add(blue);
// red.setLocation(60, 100);
// blue.setLocation(60, 100);
Roval.start();
Boval.start();
}
public void run() {
while (true) {
t = t + 0.2;
if (t > 20)
t = 0;
if (Thread.currentThread().equals(Roval)) {
//System.out.print("Roval");
int x = 60;
int h = (int) (1.0 / 2 * t * t * 3.8) + 60;
red.setLocation(x, h);
try {
Roval.sleep(50);
} catch (InterruptedException e) {
}
}
else if (Thread.currentThread().equals(Boval)) {
//System.out.print("Boval");
int x = 60 + (int) (26 * t);
int h = (int) (1.0 / 2 * t * t * 3.8) + 60;
blue.setLocation(x, h);
try {
Boval.sleep(50);
} catch (InterruptedException e) {
}
}
}
}
}
class MyCanvas extends Canvas {
Color c;
MyCanvas(Color c) {
this.setPreferredSize(new Dimension(20,20));
this.c = c;
this.setBackground(c);
}
public void Paint(Graphics g) {
super.paint(g);
g.setColor(c);
System.out.print(c.getAlpha()+"");
g.fillRect(0, 0, 20, 20);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询