java awt中paint方法的讨论,高手帮忙解释一下,很迷惑,不懂的别乱说

来源:百度知道 编辑:UC知道 时间:2024/05/13 03:35:03
我们的组件要显示出来是不是依赖于paint方法?(sun的官网说的意思好像是这样的)但是我重写了paint方法,并且也没有调用super.paint();但是怎么组件(下边的按钮和panel)还是能正常显示出来呢?谁能告诉我它们是怎么显示出来的?难道我们写的paint只是一个画面的补充?

package test;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import javax.swing.ImageIcon;

public class Test {

ImageIcon icon = new ImageIcon("back.jpg");

Image img = icon.getImage();

Panel p = new Panel(){
public void paint(Graphics g){
g.setColor(Color.red);
g.drawString("5454",30,75);
System.out.println("画Panel");
}
};

Button b = new Button("按钮"){
public void paint(Graphics g){
g.drawString("5454", 0, 0);
System.out.println("画Button");
}
};

Frame f = new Frame("frame"){
public void pai

和楼上的同赞。

这就是AWT和Swing的区别。

AWT不但最外面的那个Frame有peer,里面那个panel和button都各自有peer(WPanelPeer, WButtonPeer)。这些都是直接关联native窗口系统(如windows的窗口系统和linux的X系统)的一个句柄,每次重画的时候先通知native窗口系统按穿过去的位置,大小参数先画一个本地系统的"panel","button",所以默认的button,panel边框修饰之类的样子都和本地的一样。然后再调用java的paint在那个基础之上继续画。你可以在paint之前设个断点debug看一下,在paint之前,那个窗口,黑色的panel和空白的button已经在那里了,但没有文字。

Swing就不同了,你可以试试JFrame,JPanel,JButton. 除了最外层JFrame还是有peer的,其基本边框也是native系统决定的,和Frame有点像,其余JButton和JPanel你去用空方法重载掉他们的paint,便什么也没有了。

唉,遇到一个爱学习的好学生!可惜,所有组件不是靠Print出来的,当你NEW实例化它,并且做好布局的时候它就已经存在了,至于怎么出来的,你可以读JAVA 的源代码,显示这个东西已经在地层的JAVA基本类为你做了,如果这个东西都要你自己来控制的化,那谢一个窗口不得写死啊!~
精神可嘉哟!~