JAVA学习心得—关于JFrame图形保存的思路

JAVA初学—关于JFrame图形保存的思路

为什么绘制好的线条或者图形会清空?
在窗口打开,移动窗口进入边界,缩放窗口时,它会自动调用一个paint方法,而这个paint方法中并没有我们绘制的内容。于是,每次进行这些动作时,窗口都相当于绘制了一个空白的内容覆盖了原先我们绘制的图形。
解决方法
重写paint方法。
思路
1.保存我们的画图对象数据。
2.将对象数据数据传入paint方法里。
3.重写paint方法,并让保存好的数据按原来的图形方法绘制。
遇到的问题
1.使用paint报错
重写需要先继承,让class类继承窗口JFrame。
或者
把paint写到了其他函数里面。

2.重写的paint方法是否生效
在paint方法中加入输出语句,进行缩放窗口的操作,如果调试台没有出现语句,那么表示重写并未生效。
原因:paint 使用的Graphic并不是从写好的class类里的得到的,这里的class类指的是代码中继承了JFrame的类。
举个例子:

import java.awt.*;
import javax.swing.JFrame;
public class Window extends JFrame{
	//主函数
public static void main(String[] args) {
	Window L = new Window();
	L.UI();
}
    //重写paint方法
public void paint(Graphics g) {
	  super.paint(g);
	  System.out.println("成功");
}
  public void UI() {  
	  //窗口设置
	  JFrame window = new JFrame();
	  window.setTitle("画图");
	  window.setSize(400,500);
	  //结束程序
	  window.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
	 //设置布局
	  FlowLayout flow = new FlowLayout();
	  //添加布局
	  window.setLayout(flow);
	  //可视化
	  window.setVisible(true);
	//
	  Graphics g = window.getGraphics();
  }
}

像上面这样,paint的重写便不会生效,可以看到这里获取的Graphics g是从UI()类里新建window窗口上得到的。并不是从继承过JFrame的类的窗口上获取到的。

我们将代码更改一下:

import java.awt.*;
import javax.swing.JFrame;
public class Window extends JFrame{
	//主函数
public static void main(String[] args) {
	Window L = new Window();
	L.UI();
}
    //重写paint方法
public void paint(Graphics g) {
	  super.paint(g);
	  System.out.println("成功");
}
  public void UI() {
	  //窗口设置
	  //JFrame window = new JFrame();
	  this.setTitle("画图");
	  this.setSize(400,500);
	  //结束程序
	  this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
	 //设置布局
	  FlowLayout flow = new FlowLayout();
	  //添加布局
	  this.setLayout(flow);
	  //可视化
	  this.setVisible(true);
	//
	  Graphics g = this.getGraphics();
  }
}

将window替换成this,重写的paint方法便生效了,关于this的用法这里不做叙述。也许会在另一篇博客里写=、=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tbbaichi

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值