`
yu06206
  • 浏览: 110267 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

简单画板

阅读更多

 

以下是简单画板实现的步骤和一些自己得心得体会:

一.实现简单画板的步骤:

1.定义一个类,该类继承JFrame类。

2.定义一个现实界面的方法,在方法中设置窗体的属性。

3.实例化按钮,将按钮添加到窗体上。

4.给按钮添加监听器方法,绑定事件处理类对象。

5.得到窗体上的画布对象 Graphics,在使用画布对象来画相应的图形。

6.给窗体鼠标监听器,并且绑定事件处理类对象。

二.实现代码

画板实现类

 

package java0625;

 

import java.awt.Color;

import java.awt.Container;

import java.awt.Dimension;

import java.awt.Event;

import java.awt.FlowLayout;

import java.awt.Graphics;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JColorChooser;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

import javax.swing.KeyStroke;

 

/**

 * 画板窗体类,该类要继承JFrame类

 * 

 * @author NetJava

 * 

 */

public class DrawFrame extends JFrame {

 

/**

* 主函数

*/

public static void main(String[] args) {

DrawFrame df = new DrawFrame();

 

df.init();

}

 

/**

* 定义一个现实界面的方法

*/

public void init() {

// 设置窗体的属性

this.setTitle("未命名-画图");

this.setResizable(false);

 

// 实例化菜单

 

JMenu menuFile = new JMenu("文件(F)");

JMenuBar menuBar = new JMenuBar();

JMenuItem newItem = new JMenuItem("新建(N)");

JMenuItem newItem02 = new JMenuItem("打开(O)");

JMenuItem newItem03 = new JMenuItem("保存(S)");

JMenuItem newItem04 = new JMenuItem("另存为(A)");

JMenuItem newItem05 = new JMenuItem("发送(E)");

JMenuItem newItem06 = new JMenuItem("退出(X)");

// 创建快捷方式

newItem.setMnemonic('N');

newItem02.setMnemonic('O');

newItem03.setMnemonic('S');

newItem04.setMnemonic('A');

newItem05.setMnemonic('E');

newItem06.setMnemonic('X');

newItem.setAccelerator(KeyStroke.getKeyStroke('N', Event.CTRL_MASK));

newItem02.setAccelerator(KeyStroke.getKeyStroke('O', Event.CTRL_MASK));

newItem03.setAccelerator(KeyStroke.getKeyStroke('S', Event.CTRL_MASK));

newItem04.setAccelerator(KeyStroke.getKeyStroke('A', Event.CTRL_MASK));

newItem05.setAccelerator(KeyStroke.getKeyStroke('E', Event.CTRL_MASK));

newItem06.setAccelerator(KeyStroke.getKeyStroke('X', Event.CTRL_MASK));

menuFile.add(newItem);

menuFile.add(newItem02);

menuFile.add(newItem03);

menuFile.add(newItem04);

menuFile.add(newItem05);

menuFile.add(newItem06);

 

menuBar.add(menuFile);

this.setJMenuBar(menuBar);

 

JMenu menuFile02 = new JMenu("编辑(E)");

JMenuItem neWItem1 = new JMenuItem("撤销(U)");

JMenuItem neWItem021 = new JMenuItem("重复(R)");

JMenuItem neWItem031 = new JMenuItem("剪切(T)");

JMenuItem neWItem041 = new JMenuItem("复制(C)");

JMenuItem neWItem051 = new JMenuItem("粘贴(V)");

JMenuItem neWItem061 = new JMenuItem("全选(A)");

// 创建快捷方式

neWItem1.setMnemonic('Z');

neWItem021.setMnemonic('Y');

neWItem031.setMnemonic('X');

neWItem041.setMnemonic('C');

neWItem051.setMnemonic('V');

neWItem061.setMnemonic('A');

neWItem1.setAccelerator(KeyStroke.getKeyStroke('Z', Event.CTRL_MASK));

neWItem021.setAccelerator(KeyStroke.getKeyStroke('Y', Event.CTRL_MASK));

neWItem031.setAccelerator(KeyStroke.getKeyStroke('X', Event.CTRL_MASK));

neWItem041.setAccelerator(KeyStroke.getKeyStroke('C', Event.CTRL_MASK));

neWItem051.setAccelerator(KeyStroke.getKeyStroke('V', Event.CTRL_MASK));

neWItem061.setAccelerator(KeyStroke.getKeyStroke('A', Event.CTRL_MASK));

menuFile02.add(neWItem1);

menuFile02.add(neWItem021);

menuFile02.add(neWItem031);

menuFile02.add(neWItem041);

menuFile02.add(neWItem051);

menuFile02.add(neWItem061);

menuBar.add(menuFile02);

 

JMenu menuFile03 = new JMenu("查看(V)");

JMenuItem neWItem2 = new JMenuItem("撤销(U)");

JMenuItem neWItem022 = new JMenuItem("重复(R)");

JMenuItem neWItem032 = new JMenuItem("剪切(T)");

JMenuItem neWItem042 = new JMenuItem("复制(C)");

JMenuItem neWItem052 = new JMenuItem("粘贴(V)");

JMenuItem neWItem062 = new JMenuItem("全选(A)");

// 创建快捷方式

neWItem2.setMnemonic('Z');

neWItem022.setMnemonic('Y');

neWItem032.setMnemonic('X');

neWItem042.setMnemonic('C');

neWItem052.setMnemonic('V');

neWItem062.setMnemonic('A');

neWItem2.setAccelerator(KeyStroke.getKeyStroke('Z', Event.CTRL_MASK));

neWItem022.setAccelerator(KeyStroke.getKeyStroke('Y', Event.CTRL_MASK));

neWItem032.setAccelerator(KeyStroke.getKeyStroke('X', Event.CTRL_MASK));

neWItem042.setAccelerator(KeyStroke.getKeyStroke('C', Event.CTRL_MASK));

neWItem052.setAccelerator(KeyStroke.getKeyStroke('V', Event.CTRL_MASK));

neWItem062.setAccelerator(KeyStroke.getKeyStroke('A', Event.CTRL_MASK));

menuFile03.add(neWItem2);

menuFile03.add(neWItem022);

menuFile03.add(neWItem032);

menuFile03.add(neWItem042);

menuFile03.add(neWItem052);

menuFile03.add(neWItem062);

menuBar.add(menuFile03);

 

JMenu menuFile04 = new JMenu("图像(I)");

JMenuItem neWItem3 = new JMenuItem("撤销(U)");

JMenuItem neWItem023 = new JMenuItem("重复(R)");

JMenuItem neWItem033 = new JMenuItem("剪切(T)");

JMenuItem neWItem043 = new JMenuItem("复制(C)");

JMenuItem neWItem053 = new JMenuItem("粘贴(V)");

JMenuItem neWItem063 = new JMenuItem("全选(A)");

// 创建快捷方式

neWItem3.setMnemonic('Z');

neWItem023.setMnemonic('Y');

neWItem033.setMnemonic('X');

neWItem043.setMnemonic('C');

neWItem053.setMnemonic('V');

neWItem063.setMnemonic('A');

neWItem3.setAccelerator(KeyStroke.getKeyStroke('Z', Event.CTRL_MASK));

neWItem023.setAccelerator(KeyStroke.getKeyStroke('Y', Event.CTRL_MASK));

neWItem033.setAccelerator(KeyStroke.getKeyStroke('X', Event.CTRL_MASK));

neWItem043.setAccelerator(KeyStroke.getKeyStroke('C', Event.CTRL_MASK));

neWItem053.setAccelerator(KeyStroke.getKeyStroke('V', Event.CTRL_MASK));

  neWItem063.setAccelerator(KeyStroke.getKeyStroke('A', Event.CTRL_MASK));

menuFile04.add(neWItem3);

menuFile04.add(neWItem023);

menuFile04.add(neWItem033);

menuFile04.add(neWItem043);

menuFile04.add(neWItem053);

menuFile04.add(neWItem063);

menuBar.add(menuFile04);

JMenu menuFile05 = new JMenu("颜色(I)");

JMenuItem neWItem4 = new JMenuItem("撤销(U)");

JMenuItem neWItem024 = new JMenuItem("重复(R)");

JMenuItem neWItem034 = new JMenuItem("剪切(T)");

JMenuItem neWItem044 = new JMenuItem("复制(C)");

JMenuItem neWItem054 = new JMenuItem("粘贴(V)");

JMenuItem neWItem064 = new JMenuItem("全选(A)");

// 创建快捷方式

neWItem4.setMnemonic('Z');

neWItem024.setMnemonic('Y');

neWItem034.setMnemonic('X');

neWItem044.setMnemonic('C');

neWItem054.setMnemonic('V');

neWItem064.setMnemonic('A');

neWItem4.setAccelerator(KeyStroke.getKeyStroke('Z', Event.CTRL_MASK));

neWItem024.setAccelerator(KeyStroke.getKeyStroke('Y', Event.CTRL_MASK));

neWItem034.setAccelerator(KeyStroke.getKeyStroke('X', Event.CTRL_MASK));

neWItem044.setAccelerator(KeyStroke.getKeyStroke('C', Event.CTRL_MASK));

neWItem054.setAccelerator(KeyStroke.getKeyStroke('V', Event.CTRL_MASK));

neWItem064.setAccelerator(KeyStroke.getKeyStroke('A', Event.CTRL_MASK));

menuFile05.add(neWItem4);

menuFile05.add(neWItem024);

menuFile05.add(neWItem034);

menuFile05.add(neWItem044);

menuFile05.add(neWItem054);

menuFile05.add(neWItem064);

menuBar.add(menuFile05);

// 是用JSpanel对容器进行布局

JPanel pan1 = new JPanel(new FlowLayout());

JPanel pan2 = new JPanel();

JPanel pan3 = new JPanel();

 

pan1.setSize(70, 750);

pan1.setBackground(Color.GRAY);

pan2.setSize(530, 750);

pan3.setSize(new Dimension(600, 50));

pan3.setBackground(Color.blue);

pan2.setBackground(Color.white);

 

Container contentPane = this.getContentPane();

// 用当前类的路径去获取图片的路径

java.net.URL ur01 = this.getClass().getResource("image01.jpg");

ImageIcon image01 = new ImageIcon(ur01);

JLabel j01 = new JLabel(image01);

java.net.URL ur02 = this.getClass().getResource("image02.jpg");

ImageIcon image02 = new ImageIcon(ur02);

JLabel j02 = new JLabel(image02);

java.net.URL ur03 = this.getClass().getResource("image03.jpg");

ImageIcon image03 = new ImageIcon(ur03);

JLabel j03 = new JLabel(image03);

java.net.URL ur04 = this.getClass().getResource("image04.jpg");

ImageIcon image04 = new ImageIcon(ur04);

JLabel j04 = new JLabel(image04);

java.net.URL ur05 = this.getClass().getResource("image05.jpg");

ImageIcon image05 = new ImageIcon(ur05);

JLabel j05 = new JLabel(image05);

java.net.URL ur06 = this.getClass().getResource("image06.jpg");

ImageIcon image06 = new ImageIcon(ur06);

JLabel j06 = new JLabel(image06);

java.net.URL ur07 = this.getClass().getResource("image07.jpg");

ImageIcon image07 = new ImageIcon(ur07);

JLabel j07 = new JLabel(image07);

java.net.URL ur08 = this.getClass().getResource("image08.jpg");

ImageIcon image08 = new ImageIcon(ur08);

JLabel j08 = new JLabel(image08);

java.net.URL ur09 = this.getClass().getResource("image09.jpg");

ImageIcon image09 = new ImageIcon(ur09);

JLabel j09 = new JLabel(image09);

java.net.URL ur10 = this.getClass().getResource("image10.jpg");

ImageIcon image10 = new ImageIcon(ur10);

JLabel j10 = new JLabel(image10);

java.net.URL ur11 = this.getClass().getResource("image11.jpg");

ImageIcon image11 = new ImageIcon(ur11);

JLabel j11 = new JLabel(image11);

java.net.URL ur12 = this.getClass().getResource("image12.jpg");

ImageIcon image12 = new ImageIcon(ur12);

JLabel j12 = new JLabel(image12);

 

// 实例化按钮

JButton btnLine = new JButton("Line");

JButton btnRect = new JButton("Rect");

JButton btnOval = new JButton("Oval");

JButton btnColor = new JButton("Color");

// 添加到窗体上

 

pan1.add(j01);

pan1.add(j02);

pan1.add(j03);

pan1.add(j04);

pan1.add(j05);

pan1.add(j06);

pan1.add(j07);

pan1.add(j08);

pan1.add(j09);

pan1.add(j10);

pan1.add(j11);

pan1.add(j12);

pan1.add(btnLine);

pan1.add(btnRect);

pan1.add(btnOval);

pan1.add(btnColor);

 

contentPane.add(pan1);

contentPane.add(pan2);

// contentPane.add(pan3);

 

this.setSize(new Dimension(800, 600));

this.setLocationRelativeTo(null);

this.setDefaultCloseOperation(3);

 

// 使用匿名内部类的方法来实现按钮的动作事件处理类

ActionListener al = new ActionListener() {

// 动作时间的处理方法

public void actionPerformed(ActionEvent e) {

// 判断当前点击的按钮是否是Color

if (e.getActionCommand().equals("Color")) {

// 弹出一个颜色选择器界面,该方法会返回一个选择颜色的值

color = JColorChooser.showDialog(null, "选择颜色", Color.BLACK);

System.out.println("Color:" + color);

} else {

// 如果不是Color,则得到按钮上的文本值

str = e.getActionCommand();

System.out.println("你点击的按钮是:" + str);

}

}

};

 

// 将动作事件处理类对象绑定到按钮的动作监听器方法上

btnLine.addActionListener(al);

btnRect.addActionListener(al);

btnOval.addActionListener(al);

btnColor.addActionListener(al);

 

this.setVisible(true);

 

// 获取窗体上的画布对象,一定要在窗体可见之后才能得到画布对象,否则得到的是空的。

Graphics g = this.getGraphics();

// 实例化一个DrawListener类的对象

DrawListener dl = new DrawListener(g, this);

// 给事件源添加鼠标监听器方法,绑定事件处理类对象。

this.addMouseListener(dl);

}

 

// 定义颜色属性

private Color color = Color.BLACK;

// 图形属性

private String str = "Line";

 

// 获取颜色属性

public Color getColor() {

return color;

}

 

// 获取图形属性

public String getStr() {

return str;

}

}

画板监听器处理类
package java0625;

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

/**
 * 用来画图形的监听器处理类,该类要实现MouseListener接口
 * 
 * @author NetJava
 * 
 */
public class DrawListener implements MouseListener {

// 画板窗体类对象
private DrawFrame df = null;
// 画布对象
private Graphics g;
//定义四个保存坐标值的变量
private  int x1,y1,x2,y2;

// 带参数的构造方法
public DrawListener(Graphics g, DrawFrame df) {
this.g = g;
this.df = df;
}

// 鼠标按下时事件处理方法
public void mousePressed(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
}

// 鼠标释放时事件处理方法
public void mouseReleased(MouseEvent e) {
//得到选择的图形
String str = df.getStr();
//设置当前所化图形的颜色
g.setColor(df.getColor());
x2 = e.getX();
y2 = e.getY();
//判断是否是相应的图形,如果是,则画相应的图形
if(str.equals("Line")){
g.drawLine(x1, y1, x2, y2);
}else if(str.equals("Rect")){
g.drawRect(x1, y1, Math.abs(x1-x2), Math.abs(y1-y2));
}else if(str.equals("Oval")){
g.drawOval(x1, y1, Math.abs(x1-x2), Math.abs(y1-y2));
}
}

// 鼠标进入组件时触发事件处理方法
public void mouseEntered(MouseEvent e) {

}

// 鼠标退出组件时触发事件处理方法
public void mouseExited(MouseEvent e) {

}

// 单击事件处理方法
public void mouseClicked(MouseEvent e) {

}
}
体会心得:
完成一个画板程序第一个遇到的问题就是怎么实现一个鼠标监听器,应该怎么选择,这是一个问题,很多时候你要分析一下你添加的监听器的作用是什么,实现的功能是什么,这都是写代码之前要分析的,然后当我完成了鼠标监听器的添加之后,觉得这个画板还是太单一,怎么去完善画板界面,然后一个个去添加,还要选择好的布局器,真的挺麻烦,要把那些工具排版好要花很多功夫,你需要去熟悉每种工具的特点,这就是我在完成简单画板的一些心得。

 

 

3
0
分享到:
评论

相关推荐

    VC++课程设计_windows简单画板

    VC++课程设计,windows简单画板,可以画直线、矩形、椭圆、改颜色、线条;清除,保存打开功能。

    用qt 编写简易画板

    这是我初学qt编写的简易画板程序,程序结构和算法不算优秀,请多多指教

    一个简易画板的实现 VS2010 QT4.8做的 C++

    一个简易画板的实现 有简单的画图,画图形,改颜色功能

    易语言简易画板

    易语言简易画板源码,简易画板,公用接口_寻找文件扩展,公用接口_复制目录,公用接口_数组到表格,公用接口_生成编号,公用接口_生成密码,公用接口_时间到文本,公用接口_数据到十六进制文本,公用接口_十六进制文本到数据,...

    简单画板(源代码)

    简单画板(源代码)有有橡皮筋功能,文本输入功能,文件输入保存功能,调色功能,取色功能等等 用MFC实现

    MFC简易画板

    用VC开发工具编写的MFC简易画板,可以实现类似与windows自带画板的一些功能

    Android简易画板源码

    使用Android的自定义View写的Android画板程序,主要使用DrawPath()实现,需要的童鞋可以下来看看。

    C# 2010 简易画板

    提供源代码 直接可运行 提供了比较全面的画板功能

    简易画板.py

    使用python做的一个简易画板,能够实现画点、画直线、画多边形、画椭圆等功能,其中包含了对Tkinter的操作以及对于GUI的操作,希望对python初学者能够有所帮助

    C#简易画板

    这是用C# GDI实现的简易画板Demo,对应博文http://blog.csdn.net/luols/article/details/7171668,有需要的朋友可以下载样例试用

    matlab简易画板GUI程序

    matlab简易画板GUI程序 可选择点、线、矩形、椭圆进行画图 可以选择颜色、线条粗细 有橡皮擦、清除按钮 只有添加文本框的功能还没有实现~

    QT做的简易画板

    用qt做的简易画板,能够实现图形,颜色,线宽选择。用鼠标移动操作。

    qt之简易画板

    本程序为简易画板程序,主要解决画板的一些基本问题,并保持绘画的流畅。希望对新人有所帮助

    c#简单画板程序

    c#简单画板程序 有c#代码编写的简单画板程序 代码类资源

    易语言源码易语言简易画板源码.rar

    易语言源码易语言简易画板源码.rar 易语言源码易语言简易画板源码.rar 易语言源码易语言简易画板源码.rar 易语言源码易语言简易画板源码.rar 易语言源码易语言简易画板源码.rar 易语言源码易语言简易画板源码....

    简易画板(C语言期末作业)

    简易画板,源码分享,适用于初学C语言,期末大作业等。

    简易画板

    简单的绘图工具 的代码

    VB制作的简单画板程序

    VB制作的简单画板程序,可以改变画笔颜色

    基于C#的简易画板

    vs2010上基于C#编写的简易画板,可画简易图形,擦出,并且在导入图片上绘画

    Python开发的PyGame实现简易画板_Demo

    Python开发的PyGame实现简易画板_Demo

Global site tag (gtag.js) - Google Analytics