画板

画板是学习java接触的第一个可以称作项目的东西,从开始的做界面到画直线画曲线,以及后面的重绘,一步步走过来,才发现其实走过的路其实蛮长滴 :D
1:界面:用JFrame创建一个对象并添加组件ok啦
public class DrawFrame extends javax.swing.JFrame{

/**
* 程序入口
* @param args
*/
public static void main(String[] args) {
//创建一个DrawFrame的对象
DrawFrame df = new DrawFrame();
df.showUI();
}

/**
* 显示画板窗体的类
*/
public void showUI(){
//设置窗体的属性
this.setSize(600, 500);
this.setTitle("简单画板");

this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setLayout(new java.awt.FlowLayout());
//添加按钮选项
javax.swing.JButton line = new javax.swing.JButton("直线");
javax.swing.JButton Qline = new javax.swing.JButton("曲线");
javax.swing.JButton rect = new javax.swing.JButton("矩形");
javax.swing.JButton oval = new javax.swing.JButton("圆形");
javax.swing.JButton btnColor = new javax.swing.JButton("颜色");
javax.swing.JButton eraser = new javax.swing.JButton("橡皮");
this.add(btnColor);
this.add(Qline);
this.add(line);
this.add(eraser);
this.add(rect);
this.add(oval);
this.setVisible(true);
//得到事件源上的画布对象
java.awt.Graphics g = this.getGraphics();
//创建一个DrawMotionListener类
dml = new DrawListener(g,this);
//给事件源添加鼠标拖动的监听器
this.addMouseMotionListener(dml);
this.addMouseListener(dml);
line.addActionListener(dml);
rect.addActionListener(dml);
oval.addActionListener(dml);
btnColor.addActionListener(dml);
Qline.addActionListener(dml);
eraser.addActionListener(dml);
}
}
2:画曲线:在窗体上得到画布之后画图形,选择适当的画布方法就可以了,但画曲线这个方法并没有。因此,我们把曲线看成无数连在一起的直线,当鼠标拖动时,交换起始坐标画直线就能画曲线了
if ("曲线".equals(command)) {
g.setColor(color);
g.drawLine(x1, y1, x2, y2);
x1 = x2;
y1 = y2;
}
3:重绘:窗体最小化最大化或者切换之后,再显示的窗体实际上是重绘的窗体,但之前画的图形由于没有保存而无法重绘。要完成重绘就要保存已绘制的图形并在重绘窗体的时候重绘图形,因此,我们分三步完成:
(1).创建一个类,用来获取图形信息

public class Graph {
private java.awt.Color color;
private String item;
private int x1, y1, x2, y2;

//构造函数用来初始化属性
public Graph(String item,java.awt.Color color,int x1,int y1,int x2,int y2){
this.item = item;
this.color = color;
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}

public java.awt.Color getColor() {
return color;
}

public void setColor(java.awt.Color color) {
this.color = color;
}

public String getItem() {
return item;
}

public void setItem(String item) {
this.item = item;
}

public int getX1() {
return x1;
}

public void setX1(int x1) {
this.x1 = x1;
}

public int getY1() {
return y1;
}

public void setY1(int y1) {
this.y1 = y1;
}

public int getX2() {
return x2;
}

public void setX2(int x2) {
this.x2 = x2;
}

public int getY2() {
return y2;
}

public void setY2(int y2) {
this.y2 = y2;
}

(2).创建一个自定义队列来保存图形信息
(3).重绘窗体的时候重绘图形
/**
* 重写窗体类的重绘方法
*/
public void paint(java.awt.Graphics g){
//首先调用父类的重绘方法
super.paint(g);
//判断dml对象是否为null
if(null != dml){
//获取所画图形的数据
for(int i=0;i<dml.getGraphList().size();i++){
Graph graph = dml.getGraphList().get(i);
//判断图形
if(graph.getItem().equals("曲线")){
//设置颜色
g.setColor(graph.getColor());
//画曲线
g.drawLine(graph.getX1(), graph.getY1(), graph.getX2(), graph.getY2());
}
if(graph.getItem().equals("直线")){
//设置颜色
g.setColor(graph.getColor());
//画直线
g.drawLine(graph.getX1(), graph.getY1(), graph.getX2(), graph.getY2());
}

if(graph.getItem().equals("矩形")){
//设置颜色
g.setColor(graph.getColor());
//画矩形
g.drawRect(Math.min(graph.getX1(),graph.getX2()),Math.min(graph.getY1(), graph.getY2()),Math.abs(graph.getX2()-graph.getX1()) , Math.abs(graph.getY2()-graph.getY1()));
}
if(graph.getItem().equals("圆形")){
//设置颜色
g.setColor(graph.getColor());
//画圆
g.drawOval(Math.min(graph.getX1(),graph.getX2()),Math.min(graph.getY1(), graph.getY2()),Math.abs(graph.getX2()-graph.getX1()) , Math.abs(graph.getY2()-graph.getY1()));
}
if(graph.getItem().equals("橡皮")){
//设置颜色
g.setColor(graph.getColor());
//画橡皮
g.fillOval(graph.getX1(), graph.getY1(), graph.getX2(), graph.getY2());
}
}
}
}

就这样,最简单的画板就完成了!!!

初学java-----画板相关推荐

  1. 初学 Java Web 开发,请远离各种框架,从 Servlet 开发

    写在前面: 本文是转自:http://www.oschina.net/question/12_52027  的文章,如果要求删除,第一时间联系我立即删除! Web框架是开发者在使用某种语言编写Web应 ...

  2. 初学Java的那段日子

    最近因为一个朋友想要学习Java,在帮助他找教程的过程中回想到了我自己当年学习Java的那段岁月,故写了此篇文章总结了一下初学Java所必须要掌握的知识点,然后把一部分常见的面试题罗列出来.给予刚刚开 ...

  3. 初学Java Web开发,请远离各种框架,从Servlet开发

    [转载自红薯,原帖地址]http://www.oschina.net/question/12_52027 OSCHINA 软件库有一个分类--Web框架,该分类中包含多种编程语言的将近500个项目. ...

  4. 初学Java该学哪些知识?这6大知识必学

    目前,Java是开发人员的热宠,很多论坛都有不少热爱Java的开发人员,也有不少想成为Java程序员,但苦于不知道该如何学习Java,也不清楚该学些什么知识才能成为一个Java程序员.小千在这里抛砖引 ...

  5. 初学Java,这三个阶段你经历过吗?

    在互联网时代,Java语言是使用最广泛的服务器端语言之一,随着市场需求的不断扩大,Java人才缺口也越来越大.在如此广阔的前景和市场缺口下,学习Java进入Java行业成为许多人的不二之选. 根据小千 ...

  6. 初学Java,这些框架你要掌握

    随着Java面向对象语言的流行以及多层架构应用的出现,使得应用程序的可复用性得到了大大的提高,框架这个东西也在应用程序中开始出现,并得到了广泛的使用.所以千锋武汉老师为大家收集了目前较受欢迎的Java ...

  7. 初学Java会遇见的几个问题分享

    在看到Java这个行业如此火热的情况下,有不少的年轻人,都"纷纷的入坑 ".初学者学习Java,首先要入门,要喜欢Java才能学好Java.但是Java学习初期通常会遇到很多问题, ...

  8. 初学Java,如何成为年薪50万的程序员?

    作为炙手可热的薪资高的人才,Java程序员的薪资一直有目共睹.以武汉为例,根据权威机构统计,武汉Java开发人员的平均薪资是13.2k/月,这个工资远远高于武汉的平均工资水平,可以说是非常可观了.但比 ...

  9. 身为初学Java的你,这些IDE的优缺点你都知道吗?

    如今的Java可是个很好的编程语言,不仅本身功能强大,而且还能够适应多平台开发,于是市场上各种关于Java的开发工具都纷纷冒出头.那么,身为初学Java的你,它们的优缺点你都知道吗?本文小千就列举6款 ...

  10. java编程需要数学知识吗_初学Java编程,需要英语和数学基础吗?

    原标题:初学Java编程,需要英语和数学基础吗? "学习Java编程英语和数学是必备条件吗?"很多Java零基础学习或者转型IT行业的都会有这样的疑问,其实刚开始学习Java编程是 ...

最新文章

  1. 龙芯架构应用迁移技术分享——搜狗输入法应用迁移
  2. 【Vegas原创】outlook连接exchange需要密码的解决方法
  3. jquery版本冲突问题
  4. oracle锁表语句执行提示无法终止当前对话_显示Oracle数据库表或行上持有锁的所有会话...
  5. 超级有趣的七个 404 错误页面设计
  6. Elasticsearch的PHP的API使用(一)
  7. Linux系统下各文件目录的含义 入门
  8. 解决https无法缓存的问题
  9. mysql数据库编程(c 语言)_【C/C++学院】(23)Mysql数据库编程--C语言编程实现mysql客户端...
  10. wps怎么把当前页面设置为横向_办公软件操作技巧011:如何将word文档的部分页面改为横向...
  11. 企业集团合并财务报表
  12. 数字信号处理_巴特沃斯低通滤波器实验
  13. 统计学的计算机实现的心得体会,浅谈我对统计学的认识
  14. excel在线_图片转Excel表格在线工具,分享几款不错的工具
  15. 基于BLM业务领先模型演化的项目管理四张地图
  16. C#体贴之处点滴 - extention method, lambda expression, anonymous method
  17. DTX-1800精度恢复,调教之路?
  18. 三大攻略破TD手机节能之困
  19. 人工智能_游戏AI –行为树简介
  20. Java、JSP美食网站的设计与实现

热门文章

  1. 2018最热门的编程语言是什么呢?
  2. 输入文件路径的快捷方式
  3. IDEA 常用快捷键以及调试
  4. A10负载配置及主备手动切换命令
  5. Simple-Format: BMP文件格式简记
  6. CISP——身份鉴别
  7. Android 支付密码弹出框
  8. Unity 2D -- Ruby Adventure 学习笔记
  9. 网页打开速度的心理学
  10. Transformer及其变种