Java小程序之高级画板图形保存篇


Java小程序之高级画板图形保存篇

前言:前面已经完成高级的UI篇,功能篇以及重绘篇,我们的画板已经具有良好的用户交互界面,很多的功能也已经实现,并且也解决了重绘的问题;如果某天你用我们的画板绘制了一个非常漂亮的图形,想要保存下来怎么办呢?

今天,就让我们来实现画板图形的保存吧!

那么我们该如何将绘制的图形进行保存呢?首先,需要明白的是,我们绘制的图形是一个个具体的对象,有直线对象,椭圆对象等,并且这些对象都保存在了容器里面,而容器也是一个大的对象;还记得我们前面对象写的实例吗?我们成功的将两个学生对象保存到了文件中,并且也成功的将学生对象的信息从文件中读了出来;相信聪明的你已经知道该怎么保存我们绘制了图形了吧!没错,就是要利用对象流进行图形的保存;

思路:
1、给我们的画板添加菜单条、菜单以及菜单项
2、给每个菜单项添加监听器
3、点击不同的菜单项实现相应的功能
3.1图形保存功能:利用对象输出流,将容器对象写入文件;
3.2打开图形功能:利用对象输入流,将容器对象读入,然后将容器里面的图形对象在画板上绘制出来
3.3新建文件功能:新建文件,将画板上绘制的内容清空(清空之前可以确认是否需要进行保存)


源代码:
在这个类中添加菜单条、菜单、菜单项以及监听器
package com.huaxin.zhou1;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.ArrayList;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.UIManager;
import javax.swing.border.BevelBorder;


public class DrawBorder extends JFrame{
	
	//声明颜色属性,并赋默认值
	public Color c=Color.RED;
	//按钮属性,便于其他类访问
	public JButton  bt ;
	
	public JPanel panelcenter;
	
	public Graphics2D g;
	
	//容器
	ArrayList<Shape> list = new ArrayList<Shape>();

	public void initFrame()throws Exception{
		
		//设置窗体相关属性
		this.setSize(600,500);
		this.setTitle("我的画板");
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);
		
		//把添加菜单作为一个方法封装起来
		addMenu();
		
		//窗体添加主面板
		JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());
		this.add(panel);
		
		
			panelcenter = new JPanel(){
			public void paint(Graphics g1) {
					g=(Graphics2D)g1;
				//画船体
				super.paint(g);
				for (int i = 0; i <list.size(); i++) {
					Shape shape =(Shape)list.get(i);
					shape.Draw(g);
				}
			}
		};
	    panelcenter.setBackground(Color.white);
		panel.add(panelcenter);
		
		//主面板添加左面板
		JPanel panelleft = new JPanel();
		panelleft.setPreferredSize(new Dimension(50,0));
		panelleft.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));
		panelleft.setBackground(new Color(235,233,238));
		panel.add(panelleft,BorderLayout.WEST);
		
		//面板中添加按钮
		//按钮归类,统一管路
		ButtonGroup bg = new ButtonGroup();
		for(int i=0;i<16;i++){
			JRadioButton jrb = new JRadioButton();
			
			//给按钮添加图片
			ImageIcon img1  = new ImageIcon("images/draw"+i+".jpg");
			ImageIcon img2  = new ImageIcon("images/draw"+i+"-1.jpg");
			ImageIcon img3  = new ImageIcon("images/draw"+i+"-2.jpg");
			ImageIcon img4  = new ImageIcon("images/draw"+i+"-3.jpg");
			jrb.setIcon(img1);
			jrb.setRolloverIcon(img2);
			jrb.setPressedIcon(img3);
			jrb.setSelectedIcon(img4);
			jrb.setBorder(null);
			//设置默认选中的按钮
			if(i==10){
				jrb.setSelected(true);
			}
			jrb.setActionCommand("pic"+i);
			
			bg.add(jrb);
			panelleft.add(jrb);
		}
		
		//主面板添加下方面板
		JPanel paneldown =new JPanel();
		paneldown.setPreferredSize(new Dimension(0,60));
		paneldown.setLayout(null);
		paneldown.setBackground(Color.gray);
		panel.add(paneldown, BorderLayout.SOUTH);
		
		//下方面板添加子面板
		JPanel paneldownchild = new JPanel();
		paneldownchild.setBackground(Color.cyan);
		paneldownchild.setLayout(new F
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值