1. paint(Graphics g)
java 绘图时, 最常使用到的就是 paint(Graphics g){... 内容...}方法获取画笔, 然后利用 JPanel 等容器作为画布, 在 JFrame 内呈现出内容, 很多情况下这种方式都还是很实用, 下附实例:
- import java.awt.Color;
- import java.awt.Graphics;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- public class Test //Test 为自定义的主类名, 一般大写
- {
- public static void main(String args[]) {
- JFrame newFrame=new JFrame("funBox");
- newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 定义 JFrame 关闭时的操作(必需), 有效避免不能关闭后台当前框体进程的问题
- newFrame.setSize(400, 400); // 定义 JFrame 的相关属性
- newFrame.setLocation(200, 200);
- newFrame.setVisible(true);
- newFrame.add(new FangKuai()); // 将需要呈现的图像添加进 JFrame 中
- }
- }
- class FangKuai extends JPanel //FangKuai 为自定义新建类名
- {
- public void paint(Graphics g) // 重写实现 panit()方法
- {
- g.setColor(Color.green); //(0,0)位置绘制一个 20*20 的绿色方块
- g.fillRect(0, 0, 20, 20);
- }
- }
- 2. Graphics g=getGraphics()
有的时候, 需要 Graphics 对象进行更多的操作 (例如下面需要在 run() 中调用 Graphics 对象)而不能使用 paint(Graphics g)方法, 这个时候, 就得获取自己定义的 Graphics 对象来完成需求, 下附实例
- import java.applet.Applet;
- import java.awt.Color;
- import java.awt.Graphics;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- // 以下为一个框体小程序
- public class _001// _001 为自定义的主类名
- {
- public static void main(String[] args) {
- JFrame newFrame=new JFrame("funBox");
- newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 定义 JFrame 关闭时的操作(必需), 有效避免不能关闭后台当前框体进程的问题
- newFrame.setSize(400, 400); // 定义 JFrame 的相关属性
- newFrame.setLocation(200, 200);
- newFrame.setVisible(true);
- newThread n1= new newThread(); // 线程的运行, 将需要呈现的图像添加进 JFrame 中
- newFrame.add(n1);
- Thread t1 = new Thread(n1);
- t1.start();
- }
- }
- class newThread extends JPanel implements Runnable //Java 类中只能继承一个类, 但是可以实现多个接口, 此处 newThread 为自定义新建类名
- {
- Graphics g; // 此处定义 Graphics 对象 g;
- private static final long serialVersionUID = 1L;
- public void run() // 进程 run()方法重写
- {
- g=getGraphics(); //Graphics 对象 g 的获取
- for(int i=0;i<100;)
- {
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- this.update(g) ; //update()方法的调用, 刷新图像, 使得图像不会重叠显现
- g.setColor(Color.green); // 绘制 (0,0) 开始移动的 20*20 绿色小块
- g.fillRect(i, i, 20, 20);
- i+=20;
- }
- }
- }
3. 总结
简单的调用 repaint()方法确实可以完成很多 java 绘图需求, 但是当需要灵活得到 Graphics 对象时, 就必须用 getGraphics()获取了, 自己 Java 绘图的一点小小经验, 希望得到更多点评得以改进.
<JAVA>paint(Graphics g)与 Graphics g=getGraphics()的两种画笔获取
来源: http://www.bubuko.com/infodetail-2651039.html