java保存画板内容,java简略画板

java简单画板

1211281451.jpg

实现步骤:

1.  主界面

主要方法:

继承JFrame类,并获得其内容面板

getContentPane();

获得内容面板的画布对象:

Graphic g=dPane.getGrahpics();

调用重绘方法

repaint();

自动调用内部类paint()方法。实现重绘。

2.  添加按钮监听器

继承鼠标监听器和事件监听器。

重写actionPerformed()等方法

3. 自定义保存与打开按钮时响应的方法

主界面:MainFrame类

public class MainFrame extends JFrame {

JPanel cPane;

private List List = new ArrayList();

/**

* 构造方法,初始化界面

*/

public MainFrame() {

//窗体相关属性

super("画板_1.0");

setSize(1000, 700);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setLocationRelativeTo(null);

//获得窗体内容面板

cPane = (JPanel) getContentPane();

cPane.setLayout(new BorderLayout());

JPanel mPane = new JPanel();

JPanel bPane = new JPanel();

JPanel dPane = new DrawPanel();

mPane.setBackground(Color.orange);

bPane.setBackground(Color.DARK_GRAY);

dPane.setBackground(Color.WHITE);

cPane.add(BorderLayout.SOUTH, mPane);

cPane.add(BorderLayout.WEST, bPane);

cPane.add(BorderLayout.CENTER, dPane);

// 菜单以及菜单子项

MenuBar bar = new MenuBar();

Menu m_file = new Menu("File");

Menu m_help = new Menu("Help");

MenuItem mi_new = new MenuItem("New");

MenuItem mi_open = new MenuItem("Open");

MenuItem mi_save = new MenuItem("Save");

m_file.add(mi_new);

m_file.add(mi_open);

m_file.add(mi_save);

bar.add(m_file);

bar.add(m_help);

// 添加菜单栏

setMenuBar(bar);

// 添加按钮

JButton btn_line = new JButton("直线");

JButton btn_curve = new JButton("曲线");

JButton btn_rectangle = new JButton("矩形");

JButton btn_oval = new JButton("圆");

JButton btn_color = new JButton("颜色");

bPane.setLayout(new GridLayout(15, 1));

bPane.add(btn_line);

bPane.add(btn_curve);

bPane.add(btn_rectangle);

bPane.add(btn_oval);

bPane.add(btn_color);

JButton btn_save = new JButton("保存");

JButton btn_open = new JButton("打开");

mPane.add(btn_save);

mPane.add(btn_open);

// 设置窗体可见

setVisible(true);

// 取的画布[

Graphics g = dPane.getGraphics();

// 创建按钮监听对象,并传入画板以及当前窗体

bl = new ButtonListener(g, dPane, this);

// 为按钮添加动作监听器

btn_line.addActionListener(bl);

btn_curve.addActionListener(bl);

btn_rectangle.addActionListener(bl);

btn_oval.addActionListener(bl);

btn_color.addActionListener(bl);

btn_save.addActionListener(bl);

btn_open.addActionListener(bl);

// 为画板添加鼠标监听器的方法

dPane.addMouseListener(bl);

dPane.addMouseMotionListener(bl);

}

class DrawPanel extends JPanel {

/**

* 重绘方法

*/

public void paint(Graphics g) {

super.paint(g);

if (null != bl) {

System.out.println("====-------------->"

+ bl.getGraphList().size());

// 取出队列中保存信息

for (int i = 0; i < bl.getGraphList().size(); i++) {

Graph graph = bl.getGraphList().get(i);

Color c = graph.getColor();

if (graph.getItem().equals("直线")

|| graph.getItem().equals("曲线")) {

g.setColor(c);

g.drawLine(graph.getX1(), graph.getY1(), graph.getX2(),

graph.getY2());

} else if (graph.getItem().equals("矩形")) {

g.setColor(c);

g.fillRect(graph.getX1(), graph.getY1(), graph.getX2(),

graph.getY2());

} else if (graph.getItem().equals("圆")) {

g.setColor(c);

g.fillOval(graph.getX1(), graph.getY1(), graph.getX2(),

graph.getY2());

}

}

}

}

}

/**

* 主方法

*

* @param args

*/

public static void main(String[] args) {

new MainFrame();

}

//自定义按钮监听器

private ButtonListener bl;

}

按钮监听类:ButtonListener类

public class ButtonListener extends MouseAdapter implements ActionListener {

private Graphics g;

private Color color = Color.black;

private JPanel dPane;

private int x1, y1, x2, y2;

private String item = "直线";

private MainFrame mf;

// 定义计数器变量

private int count = 0;

// 创建Graph类型的存储队列

private List list = new ArrayList();

// 定义保存的路径

String path = "src\\cn\\cjl\\study0428\\drawer\\save.txt";

// 传入画板以及要重绘的容器

public ButtonListener(Graphics g, JPanel dPane, MainFrame mf) {

this.mf = mf;

this.g = g;

this.dPane = dPane;

}

public void Fresh() {

// 调用MainFram的paint()方法

dPane.repaint();

}

/**

* 按钮监听响应方法

*/

public void actionPerformed(ActionEvent e) {

// 判断所选的按钮是否为颜色

if (e.getActionCommand().equals("颜色")) {

color = javax.swing.JColorChooser.showDialog(null, "颜色选择",

Color.black);

} else {

item = e.getActionCommand();

if (item.equals("保存")) {// 保存到文件

SaveOpen so = new SaveOpen();

try {

so.save(path, list);

} catch (IOException e1) {

e1.printStackTrace();

}

} else if (item.equals("打开")) {// 从文件中读取

System.out.println("====>");

SaveOpen so = new SaveOpen();

try {

list = so.open(path);

} catch (IOException e1) {

}

// 刷新

Fresh();

mf.repaint();

}

}

}

// 鼠标按下

public void mousePressed(MouseEvent e) {

// 判断为第一次点击,记录坐标

if (count == 0) {

x1 = e.getX();

y1 = e.getY();

if (!item.equals("曲线")) {

count++;

}

}

// 计数器的值为1,则绘制下列图形

else if (count == 1) {

// 记录第二次点击的坐标值

x2 = e.getX();

y2 = e.getY();

g.setColor(color);

if (item.equals("矩形")) {

g.fillRect(x1, y1, x2, y2);

addGraphList(color, item, x1, y1, x2, y2);

} else if (item.equals("直线")) {

g.drawLine(x1, y1, x2, y2);

addGraphList(color, item, x1, y1, x2, y2);

} else if (item.equals("圆")) {

g.fillOval(x1, y1, x2, y2);

addGraphList(color, item, x1, y1, x2, y2);

}

count--;

}

}

// 鼠标拖动,绘制曲线

public void mouseDragged(MouseEvent e) {

if (item.equals("曲线")) {

x2 = e.getX();

y2 = e.getY();

g.setColor(color);

g.drawLine(x1, y1, x2, y2);

addGraphList(color, item, x1, y1, x2, y2);

// 将最后一个点作为起始坐标

x1 = x2;

y1 = y2;

}

}

/**

* 将图形数据添加到队列中

*/

public void addGraphList(Color color, String item, int x1, int y1, int x2,

int y2) {

Graph graph = new Graph(color, item, x1, y1, x2, y2);

// 添加到队列中

list.add(graph);

}

/**

* 返回队列的方法

*/

public List getGraphList() {

return list;

}

}

封装图像数据类:Graph类

public class Graph {

private int x1,y1,x2,y2;

private Color color;

private String item;

public Graph(Color color,String item,int x1,int y1,int x2,int y2){

this.color=color;

this.item=item;

this.x1=x1;

this.y1=y1;

this.x2=x2;

this.y2=y2;

}

public int getX1() {

return x1;

}

public void setX1(int x1) {

this.x1 = x1;

}

public int getY1() {

return y1;

}

public void setY1(int y1) {

this.y1 = y1;

}

public int getX2() {

return x2;

}

public void setX2(int x2) {

this.x2 = x2;

}

public int getY2() {

return y2;

}

public void setY2(int y2) {

this.y2 = y2;

}

public Color getColor() {

return color;

}

public void setColor(Color color) {

this.color = color;

}

public String getItem() {

return item;

}

public void setItem(String item) {

this.item = item;

}

}

保存与打开按钮响应方法:SaveOpen类

public class SaveOpen {

/**

* 保存到文件

* @throws IOException

*/

public void save(String path,List list) throws IOException{

//输出流

FileOutputStream fos=new FileOutputStream(path);

//将文件输出流包装成可写基本类型的流

DataOutputStream dos=new DataOutputStream(fos);

System.out.println("--------------------->"+list.size());

dos.writeInt(list.size());

for(int i=0;i

Graph graph=list.get(i);

//获取选择图像

String item=graph.getItem();

//定义一个图形变量

int type=0;

//得到坐标值

int x1=graph.getX1();

int y1=graph.getY1();

int x2=graph.getX2();

int y2=graph.getY2();

//判断为圆

if(item.equals("圆")){

type=2;

}

//判断为矩形

else if(item.equals("矩形")){

type=1;

}

//判断为曲线或者直线

else{

type=0;

}

dos.writeInt(type);

dos.writeInt(x1);

dos.writeInt(y1);

dos.writeInt(x2);

dos.writeInt(y2);

//写入颜色

int rgb=graph.getColor().getRGB();

dos.writeInt(rgb);

}

dos.flush();

fos.close();

}

/**

* 读取文件

* @throws IOException

*/

public List open(String path) throws IOException{

List list=new ArrayList();

//输入流

InputStream fis=new FileInputStream(path);

DataInputStream dis=new DataInputStream(fis);

//长度

int len=dis.readInt();

System.out.println("===>"+len);

//循环输出

for(int i=0;i

int type=dis.readInt();

int x1=dis.readInt();

int y1=dis.readInt();

int x2=dis.readInt();

int y2=dis.readInt();

int rgb=dis.readInt();

Color color=new Color(rgb);

if(type==0){

String item="直线";

//实例化Graph对象

Graph graph=new Graph(color,item,x1,y1,x2,y2);

list.add(graph);

}

else if(type==1){

String item="矩形";

//实例化Graph对象

Graph graph=new Graph(color,item,x1,y1,x2,y2);

list.add(graph);

}

else if(type==2){

String item="圆";

//实例化Graph对象

Graph graph=new Graph(color,item,x1,y1,x2,y2);

list.add(graph);

}

}

dis.close();

return list;

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值