关于JFrame,我查了API看到print()方法
-------API内容------
print
public void print(Graphics g)打印此组件。对于打印前必须进行特殊处理或打印内容不同于绘制内容的组件,应用程序应该重写此方法。 
此方法的默认实现调用 paint 方法。 --------------------问:
这里有句话,叫做“对于打印前必须进行特殊处理或打印内容不同于绘制内容的组件,应用程序应该重写此方法。 ”这里“进行特殊处理”和“打印内容不同于绘制内容”,指的是啥子?1、能否解释
2、能否举例

解决方案 »

  1.   

    其中paint print 的区别
    paint用于组件实际互动使用时的绘制
    print用于实现平面化打印需要的特别绘制处理。默认调用paint,和paint一样。
    比如多项选择项目,互动使用时需要层叠方式,以节约桌面占用。一般用到的是paint这个方法~ 它会被默认自动调用~譬如第一次显示窗口的时候会调用~ 或者你把它最小化再按出来一次可能又会调用~ 你也可以用线程定时调用repaint(),repaint()方法会自动调用paint~~
     调用的时候会用传入的那支画笔”Graphics g“  然后就可以用这支画笔画东西例子:(例子中没有覆盖掉已经画出来的小圆~可以自己上网搜索双缓冲技术~把背景设置成一张img 再用update重画背景~ 覆盖掉画出的小圆就可以看到一个小圆在窗口移动) 
    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.event.WindowListener;
    import java.lang.reflect.InvocationTargetException;import javax.swing.*;public class JFrame extends javax.swing.JFrame {

    public static void main(String args[]) {
    new JFrame().launch();
    }

    public void launch() {
    this.setLayout(null);
    this.setLocation(400, 200);
    this.setSize(600, 300);
    this.setTitle("test_Print_function");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);

    //调用重画线程
    Thread rt = new Thread(new RepaintThread());
    rt.start();
    }
    //画出圆的原始坐标
    int x = 50;
    int y = 50;
    //重写print 方法,画出自己想要的内容
    public void paint(Graphics g){
    Color c = g.getColor();  //保存现场
    g.setColor(Color.RED);
    g.fillOval(x, y, 30, 30); //用g画笔画出圆
    x += 40 ; //下次调用画出的圆将向右移动10个像素,移动速度由重画线程的睡眠时间决定
    g.setColor(c); //恢复现场
    }

    class RepaintThread implements Runnable {
    public void run() {
    while(true ) {
    //调用重画函数 ,重画函数会自动调用print 函数画出窗口及其他你想要的内容;
    repaint() ;
    try {
    Thread.sleep(500); //休眠500毫秒再调用重画
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }
    }
     
      

  2.   


    你这个比喻好 ! 
    很抱歉现在回复,这两天有点事!我基本懂了!希望你看看我这个问题:http://bbs.csdn.net/topics/390433486?page=1#post-394372347
      

  3.   


    首先:这么晚才回,有点不好意思,最近考试 ... 
    其次:你代码我看过后,感觉不错!我想问几个问题:
        我曾经在CSDN提问,说JFrame没有使用过一次paintComponents(),那要怎么用这个绘制函数?
    看过你的分析后,我感觉“心跳”。    想请教下:paint\print\paintComponent\repaint\updateUI\update之间到底怎么回事?
    很多书上包括《Core 》里面,都只告诉我们怎么用,从没讲过是干嘛的,我很困惑,请教下 ...