📄 30f84c9174a6001c10a492b7ec835361
字号:
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[]={ "New", "Open", "Save", //基本操作按钮,包括"新建"、"打开"、"保存" /*定义画图板上面有的基本绘图单元按钮*/ "Pencil", //铅笔画,也就是用鼠标拖动着随意绘图 "Line", //绘制直线 "Rect", //绘制空心矩形 "fRect", //绘制以指定颜色填充的实心矩形 "Oval", //绘制空心椭圆 "fOval", //绘制以指定颜色填充的实心椭圆 "Circle", //绘制空心圆形 "fCircle", //绘制以指定颜色填充的实心圆形 "RoundRect", //绘制空心圆角矩形 "frRect", //绘制以指定颜色填充的实心圆角矩形 "Bezier", //绘制Bezier曲线 "Rubber", //橡皮擦,可用来擦去已经绘制好的图案 "Color", //选择颜色按钮,可用来选择需要的颜色 "Stroke", //选择线条粗细的按钮,输入需要的数值可以实现绘图线条粗细的变化 "Word" //输入文字按钮,可以在绘图板上实现文字输入 }; private String styleNames[]={ " 宋体 " , " 隶书 " , " 华文彩云 " , " 仿宋_GB2312 " , " 华文行楷 " , " 方正舒体 " , " Times New Roman " , " Serif " , " Monospaced " , " SonsSerif " , " Garamond " }; //可供选择的字体项 private Icon items[]; private String tipText[]={ //定义鼠标移动到相应按钮上面停留时显示的提示说明条 "新建", "打开", "保存", "铅笔画", "直线", "空心矩形", "实心矩形", "空心椭圆", "实心椭圆", "空心圆形", "实心圆形", "空心圆角矩形", "实心圆角矩形", "bezier曲线", "橡皮擦", "选择颜色", "设置线条粗细", "输入文本" }; JToolBar buttonPanel ; //定义按钮面板 private JLabel statusBar; //显示鼠标状态的提示条 private DrawPanel drawingArea; //画图区域 private int width=680,height=550; //定义画图区域初始大小 drawings[] itemList=new drawings[500]; //用来存放基本图形的数组 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("简易画图板1.0"); 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, "这是一个简易画图板,作者:陈永 "," 画图板程序说明 ", 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(names[i] + ".gif" ); 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 void actionPerformed(ActionEvent e) { loadFile(); } } ); choices[2].addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e) { saveFile(); } } ); choices[choices.length-3].addActionListener(handler1); choices[choices.length-2].addActionListener(handler1); choices[choices.length-1].addActionListener(handler1); //字体风格选择 styles=new JComboBox(styleNames); styles.setMaximumRowCount(10); styles.addItemListener( new ItemListener(){ public void itemStateChanged(ItemEvent e) { style1=styleNames[styles.getSelectedIndex()];} } );//字体选择 bold=new JCheckBox("BOLD"); italic=new JCheckBox("ITALIC"); checkBoxHandler cHandler=new checkBoxHandler(); bold.addItemListener(cHandler); italic.addItemListener(cHandler); JPanel wordPanel=new JPanel(); buttonPanel.add(bold); buttonPanel.add(italic); buttonPanel.add(styles); styles.setMinimumSize( new Dimension ( 50, 30 ) ); styles.setMaximumSize(new Dimension ( 100, 30 ) ); Container c=getContentPane(); super.setJMenuBar( bar ); c.add(buttonPanel,BorderLayout.NORTH); c.add(drawingArea,BorderLayout.CENTER); statusBar=new JLabel(); c.add(statusBar,BorderLayout.SOUTH); statusBar.setText(" 欢迎使用此简易画图板 :)"); createNewItem(); setSize(width,height); show(); }//按钮侦听器ButtonHanler类,内部类,用来侦听基本按钮的操作public class ButtonHandler implements ActionListener { public void actionPerformed(ActionEvent e) { for(int j=3;j<choices.length-3;j++) {if(e.getSource()==choices[j]) {currentChoice=j; createNewItem(); repaint();} } } }//按钮侦听器ButtonHanler1类,用来侦听颜色选择、画笔粗细设置、文字输入按钮的操作public class ButtonHandler1 implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getSource()==choices[choices.length-3]) {chooseColor();} if(e.getSource()==choices[choices.length-2]) {setStroke();} if(e.getSource()==choices[choices.length-1]) {JOptionPane.showMessageDialog(null, "在画图区域点击鼠标,确定文本输入位置", "Hint",JOptionPane.INFORMATION_MESSAGE ); currentChoice=14; createNewItem(); repaint(); } } }//鼠标事件mouseA类,继承了MouseAdapter,用来完成鼠标相应事件操作 class mouseA extends MouseAdapter { public void mousePressed(MouseEvent e) {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==14) { itemList[index].x1=itemList[index].x2=e.getX(); itemList[index].y1=itemList[index].y2=e.getY(); index++; createNewItem(); } //如果当前选择的图形式文字输入,则进行下面操作 if(currentChoice==15) { itemList[index].x1=e.getX(); itemList[index].y1=e.getY(); String input; input=JOptionPane.showInputDialog("请输入文本"); itemList[index].s1=input; itemList[index].x2=f1; itemList[index].y2=f2; itemList[index].s2=style1; index++; currentChoice=15; createNewItem(); drawingArea.repaint(); } } public void mouseReleased(MouseEvent e) {statusBar.setText(" 释放鼠标 @:[" + e.getX() + ", " + e.getY() + "]"); if(currentChoice==3||currentChoice==13) { itemList[index].x1=e.getX(); itemList[index].y1=e.getY(); } itemList[index].x2=e.getX(); itemList[index].y2=e.getY(); repaint(); index++; createNewItem(); } public void mouseEntered(MouseEvent e) {statusBar.setText(" 鼠标进入 @:[" + e.getX() + ", " + e.getY() + "]"); } public void mouseExited(MouseEvent e) {statusBar.setText(" 鼠标离开 @:[" + e.getX() + ", " + e.getY() + "]"); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -