package drawingpanel;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
public class MiniDrawPad extends JFrame //主类,扩展了JFrame类,用来生成主界面
{
private ObjectInputStream input;
private ObjectOutputStream output; //定义输入输出流,用来调用和保存图像文件
private JButton choices[]; //按钮数组,存放以下名称的功能按钮
private String names[]={
"新建文件",
"打开文件",
"保存文件", //这三个是基本操作按钮,包括"新建"、"打开"、"保存"
"Pencil", //铅笔画,也就是用鼠标拖动着随意绘图
"Line", //绘制直线
"Rect", //绘制空心矩形
"fRect", //绘制以指定颜色填充的实心矩形
"Oval", //绘制空心椭圆
"fOval", //绘制以指定颜色填充的实心椭圆
"Circle", //绘制圆形
"fCircle", //绘制以指定颜色填充的实心圆形
"RoundRect", //绘制空心圆角矩形
"frRect", //绘制以指定颜色填充的实心圆角矩形
"Rubber", //橡皮擦,可用来擦去已经绘制好的图案
"Color", //选择颜色按钮,可用来选择需要的颜色
"Stroke", //选择线条粗细的按钮,输入需要的数值可以实现绘图线条粗细的变化
"Word" //输入文字按钮,可以在绘图板上实现文字输入
};
private String styleNames[]={
" 宋体 " , " 隶书 " , " 华文彩云 " , " 仿宋_GB2312 " , " 华文行楷 " ,
" 方正舒体 " , " Times New Roman " , " Serif " , " Monospaced " ,
" SonsSerif " , " Garamond "
}; //可供选择的字体项
//当然这里的灵活的结构可以让读者自己随意添加系统支持的字体
private Icon items[];
private String tipText[]={
//这里是鼠标移动到相应按钮上面上停留时给出的提示说明条
"Draw a new picture",
"Open a saved picture",
"Save current drawing",
"Draw at will",
"Draw a straight line",
"Draw a rectangle",
"Fill a ractangle",
"Draw an oval",
"Fill an oval",
"Draw a circle",
"Fill a circle",
"Draw a round rectangle",
"Fill a round rectangle",
"Erase at will",
"Choose current drawing color",
"Set current drawing stroke",
"Write down what u want"
};
JToolBar buttonPanel ; //定义按钮面板
private JLabel statusBar; //显示鼠标状态的提示条
private DrawPanel drawingArea; //画图区域
private int width=700,height=450; //定义画图区域初始大小
drawings[] itemList=new drawings[5000]; //用来存放基本图形的数组
private int currentChoice=3; //设置默认画图状态为随笔画
int index=0; //当前已经绘制的图形数目
private Color color=Color.black; //当前画笔颜色
int R,G,B; //用来存放当前色彩值
int f1,f2; //用来存放当前字体风格
String style1; //用来存放当前字体
private float stroke=1.0f; //设置画笔粗细,默认值为1.0f
JCheckBox bold,italic; //定义字体风格选择框
//bold为粗体,italic为斜体,二者可以同时使用
JComboBox styles;
public MiniDrawPad() //构造函数
{
super("我的画板by39061521王磊");
JMenuBar bar=new JMenuBar(); //定义菜单条
JMenu fileMenu=new JMenu("文件");
fileMenu.setMnemonic('F');
//新建文件菜单条
JMenuItem newItem=new JMenuItem("新建");
newItem.setMnemonic('N');
newItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
newFile(); //如果被触发,则调用新建文件函数段
}
}
);
fileMenu.add(newItem);
//保存文件菜单项
JMenuItem saveItem=new JMenuItem("保存");
saveItem.setMnemonic('S');
saveItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
saveFile(); //如果被触发,则调用保存文件函数段
}
}
);
fileMenu.add(saveItem);
//打开文件菜单项
JMenuItem loadItem=new JMenuItem("打开文件");
loadItem.setMnemonic('L');
loadItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
loadFile(); //如果被触发,则调用打开文件函数段
}
}
);
fileMenu.add(loadItem);
fileMenu.addSeparator();
//退出菜单项
JMenuItem exitItem=new JMenuItem("退出");
exitItem.setMnemonic('X');
exitItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
System.exit(0); //如果被触发,则退出画图板程序
}
}
);
fileMenu.add(exitItem);
bar.add(fileMenu);
//设置颜色菜单条
JMenu colorMenu=new JMenu("颜色");
colorMenu.setMnemonic('C');
//选择颜色菜单项
JMenuItem colorItem=new JMenuItem("请选择颜色");
colorItem.setMnemonic('O');
colorItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
chooseColor(); //如果被触发,则调用选择颜色函数段
}
}
);
colorMenu.add(colorItem);
bar.add(colorMenu);
//设置线条粗细菜单条
JMenu strokeMenu=new JMenu("画笔设置");
strokeMenu.setMnemonic('S');
//设置线条粗细菜单项
JMenuItem strokeItem=new JMenuItem("画笔粗细选择");
strokeItem.setMnemonic('K');
strokeItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
setStroke();
}
}
);
strokeMenu.add(strokeItem);
bar.add(strokeMenu);
//设置提示菜单条
JMenu helpMenu=new JMenu("帮助");
helpMenu.setMnemonic('H');
//设置提示菜单项
JMenuItem aboutItem=new JMenuItem("程序信息");
aboutItem.setMnemonic('A');
aboutItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(null,
" by 39061521 王磊 ",
" 画图板程序说明 ",
JOptionPane.INFORMATION_MESSAGE );
}
}
);
helpMenu.add(aboutItem);
bar.add(helpMenu);
items=new ImageIcon[names.length];
//创建各种基本图形的按钮
drawingArea=new DrawPanel();
choices=new JButton[names.length];
buttonPanel = new JToolBar( JToolBar.VERTICAL ) ;
buttonPanel = new JToolBar( JToolBar.HORIZONTAL) ;
ButtonHandler handler=new ButtonHandler();
ButtonHandler1 handler1=new ButtonHandler1();
//导入我们需要的图形图标,这些图标都存放在与源文件相同的目录下面
for(int i=0;i<choices.length;i++)
{//items[i]=new ImageIcon( MiniDrawPad.class.getResource(names[i] +".gif"));
//如果在jbuilder下运行本程序,则应该用这条语句导入图片
items[i]=new ImageIcon(names[i] + ".gif");
//默认的在jdk或者jcreator下运行,用此语句导入图片
choices[i]=new JButton("",items[i]);
choices[i].setToolTipText(tipText[i]);
buttonPanel.add(choices[i]);
}
//将动作侦听器加入按钮里面
for(int i=3;i<choices.length-3;i++)
{
choices[i].addActionListener(handler);
}
choices[0].addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
newFile();
}
}
);
choices[1].addActionListener(
new ActionListener(){
public v
评论0