关于JFrame,我查了API看到print()方法
-------API内容------
print
public void print(Graphics g)打印此组件。对于打印前必须进行特殊处理或打印内容不同于绘制内容的组件,应用程序应该重写此方法。
此方法的默认实现调用 paint 方法。 --------------------问:
这里有句话,叫做“对于打印前必须进行特殊处理或打印内容不同于绘制内容的组件,应用程序应该重写此方法。 ”这里“进行特殊处理”和“打印内容不同于绘制内容”,指的是啥子?1、能否解释
2、能否举例
-------API内容------
public void print(Graphics g)打印此组件。对于打印前必须进行特殊处理或打印内容不同于绘制内容的组件,应用程序应该重写此方法。
此方法的默认实现调用 paint 方法。 --------------------问:
这里有句话,叫做“对于打印前必须进行特殊处理或打印内容不同于绘制内容的组件,应用程序应该重写此方法。 ”这里“进行特殊处理”和“打印内容不同于绘制内容”,指的是啥子?1、能否解释
2、能否举例
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();
}
}
}
}
}
你这个比喻好 !
很抱歉现在回复,这两天有点事!我基本懂了!希望你看看我这个问题:http://bbs.csdn.net/topics/390433486?page=1#post-394372347
首先:这么晚才回,有点不好意思,最近考试 ...
其次:你代码我看过后,感觉不错!我想问几个问题:
我曾经在CSDN提问,说JFrame没有使用过一次paintComponents(),那要怎么用这个绘制函数?
看过你的分析后,我感觉“心跳”。 想请教下:paint\print\paintComponent\repaint\updateUI\update之间到底怎么回事?
很多书上包括《Core 》里面,都只告诉我们怎么用,从没讲过是干嘛的,我很困惑,请教下 ...