现在我们用java的swing库,当然是直接调用函数,图像就出来了,那么它们到底是如何画出来的呢?比如,我要画一个最基本的东西,最短的语句大概是这样
JFrame j=new JFrame();
j.setSize(200,200);
j.setVisible(true);我翻了翻source,构造函数这一步,都是初始化一些基本信息
  protected void frameInit() {
        enableEvents(AWTEvent.KEY_EVENT_MASK | AWTEvent.WINDOW_EVENT_MASK);
        setLocale( JComponent.getDefaultLocale() );
        setRootPane(createRootPane());
        setBackground(UIManager.getColor("control"));
        setRootPaneCheckingEnabled(true);
        if (JFrame.isDefaultLookAndFeelDecorated()) {
            boolean supportsWindowDecorations = 
            UIManager.getLookAndFeel().getSupportsWindowDecorations();
            if (supportsWindowDecorations) {
                setUndecorated(true);
                getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
            }
        }
        sun.awt.SunToolkit.checkAndSetPolicy(this, true);
    }那么关键是setVisible这个函数了?但是源代码是这样写的:
public void setVisible(boolean b) {
        show(b);
    }
show(b)那一行是被划掉的,就是已过时方法。那现在到底是如何实现的呢?不就看不下去了?那该怎么往下看呢?或者请大家直接告诉我到底是如何画出来的

解决方案 »

  1.   

    用到底层的东西  你不一定看得到代码 。。show不是可以看么 继续往下看就是了 。。它只是对外建议用户不要用 它自己里面源码还是可以用的
      

  2.   

    java.awt.Component show()方法部分如下:
    public void show() {
            if (!visible) {
                synchronized (getTreeLock()) {
                    visible = true;
                    ComponentPeer peer = this.peer;
                    if (peer != null) {
                        peer.show();    public final Object getTreeLock() {
            return LOCK;
        }static final Object LOCK = new AWTTreeLock();static class AWTTreeLock {}就是说,AWTTreeLock是Component的内部类?但是没有什么内容呀如果先不管这个ComponentPeer peer = this.peer;ComponentPeer是接口,那现在这个接口到底是由哪个类实现的?也不得而知
      

  3.   

    swing是画,
    swt是调用本地API
      

  4.   

    Swing 是在 AWT 组件基础上构建的。所有 Swing 组件实际上也是 AWT 的一部分。Swing 使用了 AWT 的事件模型和支持类,例如 Colors、Images 和 Graphics。
    Swing 只为诸如窗口和框架之类的顶层 组件使用对等体。大部分组件(JComponent 及其子类)都是使用纯 Java 代码来模拟的。
    Swing直接调用Java2D,抛弃了本地操作系统平台组件的实现,完全自己画出来了整个组件,当然Java2D底层也是调用平台的图形系统。-----------------------------
            Apolication         -
                                -
    -----------------------------  Swing API
       Swing                    -
       Implementation           -
                                -
                                -
                                -
    -----------------------------  Java 2D API 
       Java 2D                  -
                                -
    -----------------------------当然Swing是建立在AWT基础上的,对于一些顶层容器类如Frame / Dialog / Window以及Applet是直接采用AWT的
      

  5.   

    swing就是一切都是画出来的,理论上一切也都是可以画出来的,你可以简单理解为就是调用平台的画图方法画各种各样的画,show过时是不提供作为外部使用,相当于改成protected或private方法,只是对外不再合适,并不是说它本身被弃用了。