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