items[i]=newImageIcon("Icons/"+names[i]+".gif");
choices[i]=newJButton(items[i]);
choices[i].setToolTipText(tipText[i]);
choices[i].setBackground(newColor(0,255,0));//按钮背景色设置
buttonPanel.add(choices[i]);
}
鼠标右击事件:
//工具栏右击菜单,设置工具栏是否可拖动
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.1画图界面
4.4.3画图区主要代码
详细代码见附录。
4.5状态栏
4.5.1状态栏功能设计
状态栏是显示鼠标的状态的信息栏,随时反馈鼠标信息。
4.5.2状态栏设计
图4.5.1状态栏显示
4.5.3状态栏代码
部分代码如下,详细代码见附录:
publicvoidmouseReleased(MouseEvente){
statusBar.setText("鼠标松开:
["+e.getX()+","+e.getY()+"]");
if(currentChoice==3||currentChoice==16){
itemList[index].x1=e.getX();
itemList[index].y1=e.getY();
}
itemList[index].x2=e.getX();
itemList[index].y2=e.getY();
repaint();
index++;
createNewItem();
}
5总结
经过几周的程序设计,把java十周的课程又落实到了实际的项目中去,完成了这次画图板的设计,虽然不是很完善,但是还是基本实现了画图的功能,通过查阅资料,和相互合作,解决了大多数的困难。
实现了画图的功能,并且以数组的形式存放,在以图片的形式保存。
总的来说,两个人合作,克服了分歧,统一了思想,最终完成了这次的项目。
对于未来,可能还有遇到比这难很多的项目,但是学会了去解决问题的能力,就会去实现不同的项目。
6源代码
importjava.awt.BasicStroke;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics2D;
importjava.io.Serializable;
//画图类,基本图形单元,用到串行化接口,保存时所用
classDrawingsimplementsSerializable{//Serializable:
对象序列化的接口,标识一个类的对象可以被序列化。
intx1,y1,x2,y2;//定义坐标属性
intR,G,B;//定义色彩属性
floatstroke;//定义线条粗细属性
inttype;//定义字体属性
Strings1;
Strings2;//定义字体风格属性
intthickness;//立方体的宽度
voiddraw(Graphics2Dg2d){
}//定义绘图函数
}
//各种基本图形单元的子类,都继承自父类drawings
//直线类
//随笔画类
classPencilextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
g2d.drawLine(x1,y1,x2,y2);
}
}
//直线
classLineextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));//设置画笔的线宽
g2d.drawLine(x1,y1,x2,y2);//在两点之间画一条线
}
}
//矩形类
classRectextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
g2d.drawRect(Math.min(x1,x2),Math.min(y1,y2),
Math.abs(x1-x2),Math.abs(y1-y2));//左边缘,上边缘,右边缘,下边缘,x,y,width,heigth
}
}
//实心矩形类
classfillRectextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
g2d.fillRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));
}
}
//椭圆类
classOvalextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
g2d.drawOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));
}
}
//实心椭圆
classfillOvalextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
g2d.fillOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));
}
}
//圆类
classCircleextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
g2d.drawOval(Math.min(x1,x2),Math.min(y1,y2),
Math.max(Math.abs(x1-x2),Math.abs(y1-y2)),
Math.max(Math.abs(x1-x2),Math.abs(y1-y2)));//x,y,width,height.
}
}
//实心圆
classfillCircleextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
g2d.fillOval(Math.min(x1,x2),Math.min(y1,y2),
Math.max(Math.abs(x1-x2),Math.abs(y1-y2)),
Math.max(Math.abs(x1-x2),Math.abs(y1-y2)));
}
}
//圆角矩形类
classRoundRectextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
g2d.drawRoundRect(Math.min(x1,x2),Math.min(y1,y2),
Math.abs(x1-x2),Math.abs(y1-y2),50,35);//arcWidth-4个角弧度的水平直径。
arcHeight-4个角弧度的垂直直径。
}
}
//实心圆角矩形类
classfillRoundRectextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
g2d.fillRoundRect(Math.min(x1,x2),Math.min(y1,y2),
Math.abs(x1-x2),Math.abs(y1-y2),50,35);
}
}
//3D矩形类
classRect3DextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
g2d.draw3DRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),
Math.abs(y1-y2),true);//raised-一个用于确定矩形是凸出平面显示还是凹入平面显示的boolean值。
}
}
//填充的3D矩形类
classfillRect3DextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
g2d.fill3DRect(Math.min(x1,x2),Math.min(y1,y2),
Math.abs(x1-x2),Math.abs(y1-y2),false);
}
}
//立方体类
classCubeextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setStroke(newBasicStroke(stroke));
for(inti=thickness;i>=0;i--){
g2d.fill3DRect(Math.min(x1,x2)+i,Math.min(y1,y2)-i,
Math.abs(x1-x2),Math.abs(y1-y2),true);
}
}
}
//橡皮擦类
classRubberextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(255,255,255));
g2d.setStroke(newBasicStroke(stroke+4));
g2d.drawLine(x1,y1,x2,y2);
}
}
//输入文字类
classWordextendsDrawings{
voiddraw(Graphics2Dg2d){
g2d.setPaint(newColor(R,G,B));
g2d.setFont(newFont(s2,x1,((int)stroke)*18));
if(s1!
=null)
g2d.drawString(s1,x1,y1);
}
}
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());
}//加载系统界面风格(这是把外观设置成你所使用的平台