摘 要
当今世界,科学技术对经济社会发展的影响力与日俱增,科技实力的比拼已经成为国际竞争的主要方式。我国的科技实力与美国,英国,日本等典型的科技强国之间的差距还是很大的,科技管理不够完善,实际技术追赶还有很长的路要走,在当前的国际竞争中,要实现“弯道超车”,必须要激发全国各界科研人才的创新活力,增强科技实力。所以自主研究程序显得愈发重要。
用按钮来控制绘图是一个小程序,该程序是用图形用户界面在Java程序的运行环境下实现简单的绘图功能,,和画图程序类似,是通过对各个按钮进行监视,以便对发生的事件做出反应,各种按钮通过调用相应的方法,将某个对象作为自己的监视器,并通过监视器,监视器会做出相应的处理,通过对键盘和鼠标的监视,可以在画布上做出相应图形的反应,最终实现本程序。
关 键 词 JAVA 用菜单和按钮来控制绘图 Canva Listener evlipse
- 概述
1.1 引言
用菜单和按钮来控制图形是针对画图的一个小程序,它主要是通过鼠标和键盘的控制来进行绘图,通过控制按钮来进行清楚画布上面板的图形,通过转换按钮键来控制键盘和鼠标的控制,现在已经进入了信息化时代,仅仅用纸张画图基本上不可能满足人们的需求,这套程序可以满足人们在电脑上画图的需求,还可以把键盘上的汉字,字母全都映射到此画布上十分的便捷与可靠。
1.2 系统目标
本次设计内容分为两个部分,第一是用菜单来控制绘图,第二是用按钮来控制绘图,通过给鼠标和键盘安装监视器来实现在画布上映射出不同的图形,文字与字母。
技术介绍
2.1 JAVA语言的介绍
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、安全性、平台独立与可移植性、多线程、动态性等特点 。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程,更加符合人类语言的惯性思维。Java可以编写桌面管理程序、Web应该程序、分布式系统和嵌入式应用程序等 。本次程序编辑主要运用java对于窗口、文件的编写功能。Java语言的五个个特性1,跨平台性:跨平台性是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行Java自带的虚拟机很好地实现了跨平台性。 Java源程序代码经过编译后生成二进制的字节码是与平台无关的,但是可被Java虚拟机识别的一种机器码指令,Java虚拟机提供了一个字节码到底层硬件平台及操作系统的屏障,使得Java语言具备跨平台性。2,简单:Java语言是一种相当简洁的“面向对象”程序设计语言。Java语言省略了C++语言中所有的难以理解、容易混淆的特性,例如头文件、指针、结构、单元、运算符重载、虚拟基础类等。它更加严谨、简洁。3,面向对象:面向对象技术使得应用程序的开发变得简单易用,节省代码。Java是一种面向对象的语言,也继承了面向对象的诸多好处,如代码扩展、代码复用等。4,安全性:Java编译时要进行Java语言和语义的检查,保证每个变量对应一个相应的值,编译后生成Java类。运行时Java类需要类加载器载入,并经由字节码校验器校验之后才可以运行。 Java类在网络上使用时,对它的权限进行了设置,保证了被访问用户的安全性。
5,多线程:是一种轻量级进程,是现代程序设计中必不可少的一种特性。多线程处理能力使得程序能够具有更好的交互性、实时性。
2.2 窗口设计
通过图形用户界面(GUI),用户和程序之间可以方便地进行交互。Java的java.awt包,即Java抽象窗口工具包(AWT)提供了许多用来设计GUI的组件类。关于窗口的两个重要概念:容器类和组件类。两者的关系就如酒席上的桌子和一盘盘菜,在桌子这个容器下,盛着一份份菜的盘子就如按钮、文本框等组件,是这个桌子上变得丰盛,也更加简洁地解决呈现问题。
第三章 系统配置
3.1系统的性能要求
因服务器资源有限,故以控制用户数量的手段来保证服务器的稳定。Mysql数据库引擎提供完整的 XML 支持。它还具有构成最大的 Web 站点的数据存储组件所需的可伸缩性、可用性和安全功能[1]。数据库引擎充分保护数据完整性,同时将管理上千并发修改数据库的用户的开销减到最小。因此当网络数据量增大时,系统也可以稳定的运行。
数据库安全方面主要是利用Mysql,Resin自带的各种管理工具,实现对关键数据的保护。
3.2软件配置
服务器端:安装Java虚拟机,Web服务器软件Resin,数据库软件Mysql
客户端: 安装Java虚拟机,Chrome浏览器
开发环境:INTelliJ IDEA
开发语言:Java
Web服务平台:resin-4.0.36
数据库: Mysql5.0
3.3硬件配置
服务器端:Centos6.5,有网络接口卡(NIC),内存应在4GB以上,硬盘在160GB以上。
电脑配置:CPU: Core i5 2.30GHz 内存:DDR3 8GB 硬盘:500GB
操作系统:Microsoft Windows10专业版
客户端:Core i5以上配置的PC机,有网络接口卡(NIC),内存应在4GB以上,硬盘在500GB以上。
电脑配置:CPU: Core i5 2.30GHz 内存:DDR3 8GB 硬盘:500GB
操作系统:Microsoft Windows 7 专业版
3.4网络配置
网络:服务器和客户端应有网络连通。配置TCP/IP协议。
第四章 软件分析
4.1软件需求分析
现在无论是理科,工科还是文科,都离不开画图,所以这个小程序就可以满足画图这个功能。
4.2 软件使用流程
在eclipse中点击运行按钮,即可现实窗口,根据客户的需要,在画布上可以绘画出不用的图形,点击清除按钮,即可完成清楚,点击转化按钮即可完成转换,右上角点击叉号即可推出。
软件总体设计
5.1 软件的主要构成
该软件中有一个Palette类,还有两个按钮(Button1:清除 Button2:键盘<->鼠标),在窗口的下面有一块白色的画布(canva)。
5.2 软件呈现方式
目前,Java的学习只进入初级阶段,只能通过窗口来实现软件的简单功能,具有简单的GUI界面。
软件详细设计与实验
6.1 窗口的构成
在右上角中用super固定格式,显示”画板”两个字
super("画板");
创建一个空的面板
Panel button=new Panel();
设置成流行布局
button.setLayout(new FlowLayout());
在两个按钮上镶嵌文字
button.add(clear);button.add(zh);
设置新的布局
setLayout(new BorderLayout());
add("North",button);
add("Center",ca);
安装监视器
addWindowListener(new windowcloser());
clear.addActionListener(this);
zh.addActionListener(this);
设置背景颜色
setBackground(Color.cyan);
设置背景大小
setSize(1000,1000);
pack();
setVisible(true);setLocation(400,200);
6.2 图形的设置
6.2.1鼠标绘图
在画布中点击一个地方,就会被辨别成一个函数的坐标
private int first1,first2;
private int last1,last2;
public void mousePressed(MouseEvent e){
Point first=e.getPoint();
first1=first.x;
first2=first.y;
}
按住鼠标在画布中移动,即会出现跟随鼠标移动的线条,根据所需要的图形,即可绘图
public void mouseDragged(MouseEvent e){
Point current=e.getPoint();
Graphics page=getGraphics();
last1=current.x;
last2=current.y;
if(judge==1){
page.drawLine(first1, first2, current.x, current.y);
first1=current.x;first2=current.y;
}
}
6.2.2 键盘绘图
当鼠标点击画布中某点上时(必须是当judge==2时),敲击键盘上的字母或者汉字,即可在画布中显示出来
public void keyTyped(KeyEvent e){
if(judge==2){
Graphics page=getGraphics();
a=e.getKeyChar();
page.drawString(String.valueOf(a), first1, first2);
first1+=10;
}
}
6.3 图形的转换
点击("键盘<->鼠标")按钮,即可完成鼠标和键盘的转换
public void zhuanhuan(){
if(judge==1){
judge=2;
}
else judge=1;
}
6.4 图形的清除
点击(“清除”)按钮,即可完成对画布中内容的清除
public void clear(){
Graphics page=getGraphics();
page.drawRect(0, 0, 200, 200);
repaint();
}
6.5 Uml图
程序代码
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JButton;
public class Palette extends Frame implements ActionListener{
private JButton clear=new JButton("清除");
private JButton zh=new JButton("键盘<->鼠标");
private canva ca= new canva();
class windowcloser extends WindowAdapter{
public void windowClosing(WindowEvent we){
System.exit(0);
}
}
public Palette(){
super("画板");
Panel button=new Panel();
button.setLayout(new FlowLayout());
button.add(clear);button.add(zh);
setLayout(new BorderLayout());
add("North",button);
add("Center",ca);
addWindowListener(new windowcloser());
clear.addActionListener(this);
zh.addActionListener(this);
setBackground(Color.cyan);
setSize(1000,1000);
pack();
setVisible(true);setLocation(400,200);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==clear)
ca.clear();
if(e.getSource()==zh)
ca.zhuanhuan();
}
public static void main(String args[]){
Palette h=new Palette();
}
}
class canva extends Canvas implements MouseMotionListener,MouseListener,KeyListener{
private int first1,first2;
private int last1,last2;
private char a;
private int judge=1;
public canva(){
addMouseListener(this);
addMouseMotionListener(this);
addKeyListener(this);
setBackground(Color.white);
setSize(200,200);
}
public void mousePressed(MouseEvent e){
Point first=e.getPoint();
first1=first.x;
first2=first.y;
}
public void mouseDragged(MouseEvent e){
Point current=e.getPoint();
Graphics page=getGraphics();
last1=current.x;
last2=current.y;
if(judge==1){
page.drawLine(first1, first2, current.x, current.y);
first1=current.x;first2=current.y;
}
}
public void keyTyped(KeyEvent e){
if(judge==2){
Graphics page=getGraphics();
a=e.getKeyChar();
page.drawString(String.valueOf(a), first1, first2);
first1+=10;
}
}
public void zhuanhuan(){
if(judge==1){
judge=2;
}
else judge=1;
}
public void clear(){
Graphics page=getGraphics();
page.drawRect(0, 0, 200, 200);
repaint();
}
public void keyPressed(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
}