自定义文件的格式,可以进行保存与打开,正在学习,下面的代码不是很难,主要是要想清楚:
保存;
package 画图板升级0516; /** *画图板的升级 */ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import javax.swing.*; import javax.swing.GroupLayout.Group; public class DrawUI extends JFrame{ // 单选按钮组 ButtonGroup group = new ButtonGroup(); String path = "F:\\file1\\a.image";// 保存文件的路径 JPanel center; public static void main(String[] args) { DrawUI draw = new DrawUI(); draw.creatDraw(); } /** * 初始化窗体 */ public void creatDraw(){ this.setTitle("画图板"); this.setSize(500,300); //退出JFrama this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体的布局为Border BorderLayout layout = new BorderLayout(); this.setLayout(layout); //设置菜单按钮 JMenuBar bar = creatJMenuBar(); this.setJMenuBar(bar); JPanel left =this.creatleft() ; JPanel center = this.creatCenter(); JPanel bottom = this.creatBottom(); //设置边框布局 this.add(left,BorderLayout.WEST); this.add(center,BorderLayout.CENTER); this.add(bottom,BorderLayout.SOUTH); this.setVisible(true); DrawListener lis = new DrawListener(group); center.addMouseListener(lis); } /** * 创建菜单条的方法 * @return */ public JMenuBar creatJMenuBar(){ JMenuBar bar = new JMenuBar(); JMenu menu = new JMenu("文件"); JMenuItem saveitem = new JMenuItem("保存"); saveitem.setActionCommand("save"); JMenuItem openitem = new JMenuItem("打开"); openitem.setActionCommand("open"); menu.add(saveitem); menu.add(openitem); bar.add(menu); //创建监听器的的对象 ActionListener alis = new MyListener(); saveitem.addActionListener(alis); openitem.addActionListener(alis); return bar; } /** * 设置左边 * @return */ public JPanel creatleft(){ //左边 JPanel left = new JPanel(); //设置背景颜色 left.setBackground(new Color(200,200,200,200)); //设置最佳大小 left.setPreferredSize(new Dimension(50,100)); //在左边添加按钮 String[] items = { "直线", "矩形", "椭圆"}; String[] commands = { "line", "rect", "oval" }; for(int i = 0 ;i<items.length;i++){ //设置单选按钮 JRadioButton btn = new JRadioButton(items[i]); //设置按钮的动作命令 btn.setActionCommand(commands[i]); // 分为同一个组 group.add(btn); if (i == 0) {//设置第一个被选中 btn.setSelected(true); } left.add(btn); } return left; } /** * 设置中间 * @return */ public JPanel creatCenter(){ //中间 center = new myJPanel(); center.setBackground(Color.WHITE); return center; } /** * 设置右边 * @return */ public JPanel creatBottom(){ //下边 JPanel bottom = new JPanel(); bottom.setBackground(new Color(200,200,200,200)); //设置大小setPreferredSize指设置最佳大小 bottom.setPreferredSize(new Dimension(50,50)); return bottom; } /** * * @author *重写paint()的方法 */ class myJPanel extends JPanel{ public void paint(Graphics g) { super.paint(g); // 遍历保存形状的队列 for (int i = 0; i < DrawListener.list.size(); i++) { // 取得一个形状对象 Shape sh = DrawListener.list.get(i); // 绘制形状 sh.draw(g); } } } //添加监听器 class MyListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { //得到动作命令 String command = e.getActionCommand(); System.out.println(command); if(command.equals("save")){ try{ // 将内存中的形状队列保存到文件中 File file = new File(path); FileOutputStream fos = new FileOutputStream(file); // 包装成对象流 ObjectOutputStream oos = new ObjectOutputStream(fos); // 写对象之前先要保存形状的个数 oos.writeInt(DrawListener.list.size()); for (int i = 0; i < DrawListener.list.size(); i++) { Shape sh = DrawListener.list.get(i); // 将对象写到文件中 oos.writeObject(sh); } // 强制输出 oos.flush(); fos.close(); }catch(Exception ef){ ef.printStackTrace(); } }if(command.equals("open")){ try{ // 建立文件输入流 File file = new File(path); FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); // 先读取形状的个数 int len = ois.readInt(); for (int i = 0; i < len; i++) { // 读取一个形状对象 Shape sh = (Shape) ois.readObject(); //将读取到的形状对象保存到队列中 DrawListener.list.add(sh); } fis.close(); //刷新绘制面板 center.repaint(); }catch(Exception ef){ ef.printStackTrace(); } } } } }
package 画图板升级0516; import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import javax.swing.ButtonGroup; import javax.swing.JPanel; public class DrawListener extends MouseAdapter{ static ArrayList<Shape> list = new ArrayList<Shape>(); int x1,x2,y1,y2; private Graphics g; private ButtonGroup group; private String command; private Color c; public DrawListener(ButtonGroup group){ this.group = group; } public void mousePressed(MouseEvent e) { //获得获得事件源对象 JPanel center =(JPanel) e.getSource(); // 只需要绘制在center上,所以需要从Center上取画布 // 获得center组件在屏幕上占据的区域 g = center.getGraphics(); // 获得要绘制的形状 // 得到按钮组中被选中的按钮的动作命令 command =group.getSelection().getActionCommand(); x1 = e.getX(); y1 = e.getY(); } public void mouseReleased(MouseEvent e) { x2 = e.getX(); y2 = e.getY(); if(command.equals("line")){ Line line = new Line(x1, y1, x2, y2, c); list.add(line); line.draw(g); }else if(command.equals("rect")){ Rect rect =new Rect(x1, y1, x2, y2, c); list.add(rect); rect.draw(g); } } }
package 画图板升级0516; import java.awt.Color; import java.awt.Graphics; import java.io.Serializable; public abstract class Shape implements Serializable { int x1,x2,y1,y2; Color c; void draw(Graphics g){ } }
package 画图板升级0516; import java.awt.Color; import java.awt.Graphics; public class Line extends Shape { public Line(int x1, int y1, int x2, int y2, Color c) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; this.c = c; } public void draw(Graphics g){ g.setColor(c); g.drawLine(x1, y1, x2, y2); } }
package 画图板升级0516; import java.awt.Color; import java.awt.Graphics; public class Rect extends Shape { public Rect(int x1, int y1, int x2, int y2, Color c) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; this.c = c; } public void draw(Graphics g){ g.setColor(c); g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), Math.abs(y1 - y2)); } }
相关推荐
2.5 创建只读用户自定义变量 2.6 读取标准输入 3. 脚本参数传递 4. 注释与程序头 5. 程序控制 5.1 if-then-elif-else-fi语句 5.2 for语句 5.3 while语句 5.4 until语句 5.5 break和continue命令 5.6 case...
- 获取图片验证码 - 登录:解决重复登录问题 - 注册 - 分页查询用户信息 - 修改用户信息 ## 站内信模块 - 一对一发送站内信 - 管理员广播 - 读取站内信(未读和已读) - 一对多发送站内信 ## 文件模块 - ...
易语言5.1 相对于易语言5.0更新说明: ... 修改XML解析支持库,增加写出CDATA数据功能,解决解析XML时错误的丢弃换行和TAB字符的BUG,解决读取节点值时对CDATA数据进行转义处理的BUG。 20. 修改扩展界面支持库...
之前写了一篇周和月日历,但感觉体验不是太好,所以有重新做了一遍,加上了动画。还可以自定义显示日历里的内容。 现在贴出项目源码,我现在是放在CSDN里的下载资源,这里哦 现在我上传带了GitHub上了,可以去这里下载...
// rd=后写出程序结束时删除的文件夹(相对路径即可),如:software等 ;// delmyself=后为1将删除程序自身;为2将删除所在文件夹。 ;// 程序版本:5.10.3.6 ;// 全自定义配置文件,包括窗口界面连接,作者信息...
� 由于是源代码开放的产品,对非主导厂商而言,可以避开与主导厂商在核心技术上面的差距,开发出 更 具竞争力和差异化的产品。 对运营商的影响 � 丰富的数据业务,将导致数据流量的显著增加 。 � 手机来源增加,...
分别对每个问题进行分析,该问题是否能用某个知识或技能解决:如能,写出该知识点或技能点的使用;如不能,该问题又该分为哪几个子问题来解决。 需要提交的文件 本次项目的安卓工程 本项目生成的apk文件 描述程序...
该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...
(本版的 multiccl_m.exe 和 memtest.exe 与过去的版本不兼容) 2006-11-5 v 1.120 (仅针对内存定位模块) 因为有的杀毒软件监视远程线程,用注入法要先关闭这个监视 感觉这样有些麻烦,改用发消息让宿主...
ie8以下基本上不做兼容处理。chrome支持文件夹拖拽上传。 [文件打开] office文件在线预览功能,服务器必须在公网(外部能访问该服务器) [忘记密码] 修改data/system/member.php 密码为明文的md5值 例如将admin密码重...
23.人民币大小写转换 24.获取区域颜色值 25.获取活动工作表名 26.获取最后一行行数 27.判断是否连接在线 28.币种转换 29.检验工作表是否有可打印内容 30.查找一字符串(withinstr)在另一字符串中(findstr1)中某一次...
然后就是那个FFT滤波的对话框,这里只写出了一个雏形(毕竟这几天清明节没有时间去写,求原谅- -),其实只能看看有什么功能而已,实现的函数其实还没有写的- -。 不过这次的作业并没有要求需要写FFT之后的滤波,...
((听 tankaiha 一说还真不想写GUI界面了)) 需要说明的问题是: 1. 开始定位一个样本时,如果发现样本目录中存在旧的记录文件, 程序会读取并认可 旧记录中的特征码。 如果想完全重新开始定位,应该先把旧...
在软键盘弹出后随即弹出自定义的PopuWindow在其上方,里面还给PopuWindow加入了显示 和消失的动画,另外实现了对软键盘显示和隐藏状态的监听,以及对其高度的测量,需要做些逻辑处理的话可以直接在里面写相关的代码...
SEHSum -- 利用SEH机制, 修复堆栈溢出 SEHTerm -- 演示SEH终止处理和异常抛出 SEHExcpt -- 利用SEH机制, 稀疏提交数组内存 SEHSoft -- 抛出自定义异常通知程序清零记录 Bucket -- SWMRG复合同步对象 (单写入/多读取)...
-修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle=...
WebBrowser与MSHTML 直接在WebBrowser中写HTML字符串 在webbrowser中查找字符串并定位 把图片拷贝进剪贴板 IHTMLDocument的ExecCommand 处理事件的Internet Explorer中的DOM 禁止WebBrowser右键弹出菜单 禁止...
.net 2.0 访问Oracle --与Sql Server的差异,注意事项,常见异常 Ado.net 与NHibernate的关系? 动态创建数据库 SQL Server数据库安全规划全攻略 .net通用数据库访问组件SQL Artisan应用简介1 在Framework1.0下...
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...