6. saveFile():保存当前所绘制图形程序段。
7. createNewItem():新建一个基本图形单元程序段。
相应的内部类有:
1. ButtonHandler:用来处理基本图形单元的按钮事件。
2. ButtonHandler1:用来处理New、Open、Save三个操作按钮的按钮事件。 3. DrawPanel:用老创建绘图区域的子类。
4. MouseA:继承了MouseAdapter,用来完成鼠标相应事件的操作,如单击、松开、
进入和离开等。
5. MouseB:继承了MouseMotionAdapter,用来完成鼠标拖动和鼠标移动时的相应操
作。
4、系统测试
4.1 运行结果
1. 主界面框架 主界面类继承自JFrame类,包括构造函数及各种功能的定义,主要代码如下 :
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[]={ \ \
\这三个是基本操作按钮,包括\新建\、\打开\、\保存\ \ \ \ \ \ \ \ \
//铅笔画,也就是用鼠标拖动着随意绘图 //绘制直线 //绘制空心矩形
//绘制以指定颜色填充的实心矩形 //绘制空心椭圆
//绘制以指定颜色填充的实心椭圆 //绘制圆形
//绘制以指定颜色填充的实心圆形
11 / 31
\//绘制空心圆角矩形 \ \ \ \ 变化
\ };
private String styleNames[]={
\宋体 \, \隶书 \, \华文彩云 \, \仿宋_GB2312 \, \华文行楷 \, \方正舒体 \\ }; //可供选择的字体项
private Icon items[];
private String tipText[]={
//这里是鼠标移动到相应按钮上面上停留时给出的提示说明条 \ \ \ \
\ \ \ \ \ \ \
\ \ \
\ \ \ };
JToolBar buttonPanel ;
//定义按钮面板
private JLabel statusBar; //显示鼠标状态的提示条
private DrawPanel drawingArea; //画图区域
private int width=800,height=550; //定义画图区域初始大小
12 / 31
//绘制以指定颜色填充的实心圆角矩形 //橡皮擦,可用来擦去已经绘制好的图案 //选择颜色按钮,可用来选择需要的颜色
//选择线条粗细的按钮,输入需要的数值可以实现绘图线条粗细的//输入文字按钮,可以在绘图板上实现文字输入
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(\
JMenuBar bar=new JMenuBar(); //定义菜单条 JMenu fileMenu=new JMenu(\ fileMenu.setMnemonic('F');
2. 新建、保存、打开、退出菜单项 代码如下:
//新建文件菜单条
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(); }
//如果被触发,则调用保存文件函数段 //如果被触发,则调用新建文件函数段
13 / 31
} );
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);
//如果被触发,则调用打开文件函数段
3. 线条宽度、颜色、提示功能 代码如下:
//设置颜色菜单条
JMenu colorMenu=new JMenu(\ colorMenu.setMnemonic('C');
//选择颜色菜单项
JMenuItem colorItem=new JMenuItem(\ colorItem.setMnemonic('O'); colorItem.addActionListener( new ActionListener(){
14 / 31
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,
\0808010208 \画图板程序说明 \INFORMATION_MESSAGE ); } } );
15 / 31