码农基础篇(一)
——实现简单的画板(JAVA版本)
序言之项目感慨
在过去的四五个星期,我间间断断地实现了一个小小的项目——画图板。现在能实现的功能有画出不同形状的图形,以及改变画笔绘画的颜色,还有一个重绘的功能。在做起这个的项目的那一日起,我才明白,原来一份简单的画板并不是想象中的那么容易的。在后续过程我还将会不断为这个粗糙的项目添加一些功能,以及美化界面。这些都是后续了。现在我来小论一下画板前期做项目的感受及思路吧。
积累知识阶段
经过前几天的学习积累,我知道了一些类似于JFrame,JPanel等容器和JButton,JPasswordFiled之类的组件,还学习了继承父类实现接口这些稍微复杂一点的内容。在实现接口的同时,必然少不了添加监听器的活儿。现在一谈到添加监听器,第一反应是参数传递,遇到参数传递就会想到空指针,当初始化时忘记定义变量,以及数据在中途忘记传递,就会引起空指针现象。我提前在这里说了空指针现象,是因为本人大大咧咧不拘小节常犯这样的错误,还望观者记住尽量避免此类错误的发生。
我在打开系统自带的画板的时候,不禁想到,我,能不能也做一个类似的画板呢?我的画板能够用各种颜色的画笔画出各种不同的形状,在我缩小放大画图板的时候图形能不能还是还是我缩小之前的样子呢?
项目始于一些小小的构想,而我现在对项目的这个构想应该是后续在实现功能的时候一点一点的挤牙膏似得挤出来的。记得上一学期C++老师有提前向我们展示大三大四可能会接触的课程——项目设计,那时候我才明白原来工程项目并不是简简单单几行代码就能搞定的事情。
画图板代码阶段
上面那么多废话以后,我现在在真正的说说我的代码思路了吧。
首先创建一个JFrame,分居南北两面的JPanel,和无数的JButton按钮,将JPanel添加到JFrame上面,JButton添加到南面的JPanel上面(以及大多数人的习惯添加到南面的,这个格局也是按照大多数的人习惯而设置的)。
public class DrawUI extends JFrame{
public void initUI(){
this.setTitle("画板"); // 给窗体命名
this.setSize(new Dimension(700,600)); // 给窗体设置大小
this.setLocationRelativeTo(null);// 将窗体的位置设在屏幕的中心位置
this.setDefaultCloseOperation(3); // 设置窗体关闭
...
JButton jb_Line = new JButton(line);
jb_Line.setActionCommand("line");
JPanel jp_north = new JPanel();
jp_north.setPreferredSize(new Dimension(690,50));//设置面板的大小
jp_north.setBackground(Color.gray);
...
this.add(jp_north,BorderLayout.NORTH);//设置面板在窗体的北边(边框布局)
this.add(jp_south,BorderLayout.SOUTH);
jp_north.add(jb_Line);
...
this.setVisible(true); // 使窗体可见
}
}
其次为不同的行为添加监听器。以画出不同形状的JButton为例:采用的是点击鼠标以及拖拉鼠标这些行为可以重写MouseMotionListener接口,并将相应事件行为添加到这个重写的接口下面。
// 创建形状按钮监听器对象
ShapeListener sl = new ShapeListener();
// 给形状按钮添加监听器
jb_Line.addActionListener(sl);
public class DrawListener implements MouseListener{
...
/**
* 重载构造函数(旨在传递参数),将参数赋值给各个属性
* @param g
* @param sl
* @param cl
*/
public DrawListener(Graphics g, ShapeListener sl,
ColorListener cl){
this.g = g;
this.sl = sl;
this.cl = cl;
}
...
}
最后,重绘功能的实现。将需要保存的数据封装在Shape类中,并将类存放在动态数组中。重写JPanel类,重绘缩小或是改变窗口行为之前的图形。
public class MyShape {
// 定义Shape类的属性(起始点坐标,图形类型,画笔颜色)
private int x1,x2,y1,y2;
private String type;
private Color color;
...
}
public class MyJPanel extends JPanel{
/**
* 重写重绘方法
*/
public void paint(Graphics g)
{
super.paint(g); //重绘窗体
System.out.println("chonghui");
for (int i = 0; i < DrawListener.my_q.getSize(); i++){
DrawListener.my_q.seekIndex(i).drawShape(g);
}
}
}
分享到:
相关推荐
首先,我们来看系统的开发语言——Java。Java 1.8是这个项目的基础,它提供了丰富的API和强大的功能,使得开发者能够构建出健壮且高效的系统。Java的跨平台特性也确保了系统能够在不同环境下运行,提高了代码的复用...
本篇将深入解析一款基于Java的毕业设计——学生选课系统,该系统涵盖了系统管理员、教师和学生的各项功能,旨在帮助读者理解和学习Java项目的开发流程及核心技术。 首先,我们来了解一下系统管理员的角色。作为系统...
本篇将详细介绍一个基于Java的毕业设计项目——进销存或库存管理系统,它涵盖了企业运营中的关键业务流程,包括进货、销售、库存管理以及统计分析,同时具备系统管理和基础资料管理功能。这个系统的设计与实现,充分...
本篇将详细解析一款基于Java的毕业设计——管理留言系统,它涵盖了商品浏览、搜索、信息管理、订单处理、购物车操作以及留言管理等多个关键功能模块。 首先,我们来看系统的主体部分——留言管理。留言系统是用户与...
本篇将深入探讨一个基于Java的毕业设计项目——“保险营销App设计与实现”,通过分析其源码,我们可以了解到如何利用Java技术栈来构建这样一个应用程序。 首先,我们要明白,这个项目的核心在于前端用户界面的设计...
本篇文章将深入探讨一个基于Java的毕业设计——鲜花商城系统,这是一个包含了用户端与管理端功能的完整电商平台。 首先,系统的核心功能包括用户登录和注册。登录和注册是任何Web应用的基础,用户需要通过这两个...
本篇将详细探讨一个基于Java的毕业设计项目——房产销售管理系统,该系统提供了完整的前后端代码,不仅为学习者提供了实践平台,也为企业管理提供了一种高效解决方案。 首先,我们来了解一下Java编程语言。Java是一...
本篇将深入探讨一个具体的Java项目——“吉首大学假期留校工作系统”,这是一个完整的前后端解决方案,包含源码、数据库设计以及详细的说明文档,对于学习Java编程和Web开发的学子而言,无疑是一份宝贵的参考资料。...
本篇文章将深入探讨“微信小程序——餐饮点餐商城”这一解决方案,分析其核心功能与优势,并就其实现的技术细节进行阐述。 一、餐饮点餐商城概述 微信小程序餐饮点餐商城,是借助微信平台构建的线上点餐系统,旨在...
《高校校园跑腿系统设计与实现——基于Android的完整源码解析》 在当今的数字化时代,高校校园生活也日益融入了科技元素。本篇将深入探讨一款名为“高校校园跑腿系统”的移动应用程序,该应用是专为大学生设计的,...
首先,我们需要了解该项目的核心技术——Java。Java是一种广泛应用于服务器端开发的面向对象编程语言,以其跨平台、安全性高和性能优秀的特点深受开发者喜爱。在这个奶牛管理系统中,Java很可能被用作后端的主要开发...
本篇将围绕“毕业设计源码之信息管理系统小程序.zip”这个主题,深入探讨其中涉及到的关键技术和实现细节。 首先,我们要理解这个项目的核心——信息管理系统。信息管理系统是一种用于收集、存储、处理、管理和分发...
《互联网企业面试真题解析——Java篇》 在IT行业的竞争日益激烈的今天,尤其是在金三银四这个求职高峰期,各大互联网企业的面试真题成为了求职者们的重要参考资料。本资料涵盖了百度、京东、唯品会、阿里、蚂蚁金服...