items[i]=newImageIcon("Icons/"+names[i]+".jpg");
choices[i]=newJButton(items[i]);
choices[i].setToolTipText(tipText[i]);
choices[i].setBackground(newColor(204,204,204));//按钮背景色设置
buttonPanel.add(choices[i]);
}
2.鼠标右击事件:
//工具栏右击菜单,设置工具栏是否可拖动
voidToolMenu(){
finalJPopupMenuToolMenu;
ToolMenu=newJPopupMenu();
finalJCheckBoxmove=newJCheckBox("工具栏是否可拖动");
move.setBackground(newColor(0,255,0));
ToolMenu.add(move);
buttonPanel.addMouseListener(newMouseAdapter(){
publicvoidmousePressed(MouseEvente){
if(e.getModifiers()==InputEvent.BUTTON3_MASK)
ToolMenu.show(buttonPanel,e.getX(),e.getY());
}
});
move.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(move.isSelected()){
buttonPanel.setFloatable(true);
}else{
buttonPanel.setFloatable(false);
}
}
});
}
}
4.4画图区
4.4.1画图区功能设计
画图区可以绘制各种图形,可以进行擦除操作,还可以根据实际需要添加文本。
4.4.2画图区界面设计
4.4.3画图区主要代码
详细代码见附录。
4.5状态栏
4.5.1状态栏功能设计
状态栏是显示鼠标的状态的信息栏,随时反馈鼠标信息。
4.5.2状态栏设计
4.5.3状态栏主要代码
部分代码如下,详细代码见附录:
publicvoidmousePressed(MouseEvente){
statusBar.setText("鼠标点击:
["+e.getX()+","+e.getY()+"]");//设置状态提示
itemList[index].x1=itemList[index].x2=e.getX();
itemList[index].y1=itemList[index].y2=e.getY();
//如果当前选择的图形是随笔画或者橡皮擦,则进行下面的操作
if(currentChoice==3||currentChoice==16){
itemList[index].x1=itemList[index].x2=e.getX();
itemList[index].y1=itemList[index].y2=e.getY();
index++;
createNewItem();
}
5设计小结
在本次的课程设计中,应用了java中开发图形应用程序的常用控件、事件处理机制、常用功能实现等。
设计的此软件基本达到理想的效果,在在编写这一软件的过程中我学到了很多java编程知识,并学会了如何快速的改正程序中的错误。
从编写记事本到画图系统的设计,有很多相同的地方,但不同的地方更多。
在编写菜单栏时可以借鉴记事本中的编程思想。
但是画图系统增添了一行工具栏,实现了更多的功能,还用到了文件的输入输出流等。
本次设计我对面向对象的程序设计有了一个总体的把握,从软件工程的角度看,有了一个完整的脉络,如需求、设计实现、测试。
编程中遇到了很多问题,通过查阅书籍、上网搜资料以及同学之间的交流讨论,最终完成了画图软件的设计。
经过这两周的课程设计,使我收获了很多java编程方面的知识,而这些知识是实践中才能学得到的。
这让我想起一句话:
纸上得来终觉浅,绝知此事要躬行。
没错,学习不仅仅是大脑的思考,更要有实践的配合。
现在觉得自己掌握的Java知识比课堂上学到的多很多,同时对其他编程语言的学习也有了一定的帮助。
其实,这只是java编程知识的冰山一角,我还有很多东西没有学到,仍需继续努力。
但是由于所学知识有限,能力水平有限,难免有些功能还不能很好的实现,还望老师批评指正。
在今后的学习中,我还会将更多的时间与精力投入到Java的学习中,不断为自己所学的知识补充新鲜血液。
参考文献
(1)耿祥义,张跃平.《Java实用教程(第3版)》北京:
电子工业出版社,2012.1
(2)陈明.《Java语言程序设计课程实践》,北京:
清华大学出版社,2009.1
(3)陈嵩等.新手学Java[M].北京:
北京希望电子出版社,2010
6附录
源程序清单
Paint.java:
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjavax.swing.*;
importjavax.swing.event.UndoableEditEvent;
importjavax.swing.undo.*;
publicclassPaint{
publicstaticvoidmain(String[]args){
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}//加载系统界面风格
catch(Exceptione){
}
newMyPaint();
}
}
classMyPaintextendsJFrame{
JMenuBarjmenuBar;
privateObjectInputStreaminput;
privateObjectOutputStreamoutput;//定义输入输出流,用来调用和保存图像文件
privateJButtonchoices[];//按钮数组
privateStringnames[]={
"New",//新建
"Open",//打开
"Save",//保存
"Pencil",//自由画笔
"Line",//直线
"Rect",//空心矩形
"fRect",//实心矩形
"Oval",//空心椭圆
"fOval",//实心椭圆
"Circle",//圆形
"fCircle",//实心圆形
"RoundRect",//圆角矩形
"frRect",//实心圆角矩形
"3DRect",//3D矩形
"f3DRect",//实心3D矩形
"Cube",//立方体
"Rubber",//橡皮擦
"bgColor",//背景色
"Color",//画笔颜色
"Stroke",//画笔大小
"Word"//文本输入
};
GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();
StringstyleNames[]=ge.getAvailableFontFamilyNames();//加载系统字体
privateIconitems[];
privateStringtipText[]={"新建","打开","保存","自由画笔","直线","空心矩形",
"实心矩形","空心椭圆","实心椭圆","圆","实心圆","空心圆角矩形",
"实心圆角矩形","3D矩形","3D矩形","3D长方体","橡皮","设置背景色","画笔颜色",
"画笔粗细","添加文字"};//按钮提示说明
JToolBarbuttonPanel;//定义按钮面板
privateJLabelstatusBar;//显示鼠标状态的提示条
privateDrawPaneldrawingArea;//定义画图区域
privateintwidth=850,height=550;//画图区域初始大小
drawings[]itemList=newdrawings[5000];//用来存放基本图形的数组
privateintcurrentChoice=3;//设置初始画笔为自由笔画
intindex=0;//已绘制图形数目
privateColorcolor=Color.black;//画笔颜色
intR,G,B;//颜色值
intf1,f2;//存放当前字体风格
Stringstyle1;//存放当前字体
privatefloatstroke=1.0f;//设置画笔粗细
staticintthickness=10;//立方体宽度
JCheckBoxbold,italic;//定义字体风格选择框
MyUndoManagermyUndo;
JComboBoxstyles;//字体选择框
Toolkitkit=Toolkit.getDefaultToolkit();//获取Toolkit实例
Imageimage=kit.getImage("Icons/Title.jpg");//获取图片
publicMyPaint(){
setTitle("绘图系统第十组版");
setLocation(300,100);//画图板窗口起始位置
setSize(750,550);
//setBounds(200,100,850,750);//画图板大小
setVisible(true);
setIconImage(image);//设置窗体图标
setCursor(newCursor(Cursor.HAND_CURSOR));//设置画图板鼠标样式
drawingArea=newDrawPanel();
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
if(JOptionPane.showConfirmDialog(newFrame(),"你确定退出吗?
","退出提示",
JOptionPane.WARNING_MESSAGE)==JOptionPane.OK_OPTION)
System.exit(0);
}
});//关闭确认提示
getJMenuBar();//获取菜单栏
myUndo=newMyUndoManager();
items=newImageIcon[names.length];
//创建各种基本图形的按钮
choices=newJButton[names.length];
buttonPanel=newJToolBar(JToolBar.VERTICAL);
buttonPanel=newJToolBar(JToolBar.HORIZONTAL);
ButtonHandlerhandler=newButtonHandler();
ButtonHandler1handler1=newButtonHandler1();
buttonPanel.setBackground(newColor(0,260,280));//工具栏背景色设置
//导入图形图标,图标存放在项目文件夹下的Icons目录内
for(inti=0;iitems[i]=newImageIcon("Icons/"+names[i]+".jpg");
choices[i]=newJButton(items[i]);
choices[i].setToolTipText(tipText[i]);
choices[i].setBackground(newColor(204,204,204));//按钮背景色设置
buttonPanel.add(choices[i]);
}
ToolMenu();//工具栏右击事件调用
//将动作侦听器加入按钮里面
for(inti=3;ichoices[i].addActionListener(handler);
}
choices[0].addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
newFile();
}
});
choices[1].addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
loadFile();
}
});
choices[2].addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
saveFile();
}
});
choices[choices.length-4].addActionListener(handler1);
choices[choices.length-3].addActionListener(handler1);
choices[choices.length-2].addActionListener(handler1);
choices[choices.length-1].addActionListener(handler1);
//字体风格选择
styles=newJComboBox(styleNames);
styles.setMaximumRowCount(10);
styles.a