简单画板_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 简单画板

简单画板

 2011/7/11 11:07:50  yu06206  http://yu06206.iteye.com  我要评论(0)
  • 摘要:以下是简单画板实现的步骤和一些自己得心得体会:一.实现简单画板的步骤:1.定义一个类,该类继承JFrame类。2.定义一个现实界面的方法,在方法中设置窗体的属性。3.实例化按钮,将按钮添加到窗体上。4.给按钮添加监听器方法,绑定事件处理类对象。5.得到窗体上的画布对象Graphics,在使用画布对象来画相应的图形。6.给窗体鼠标监听器,并且绑定事件处理类对象。二.实现代码画板实现类packagejava0625;importjava.awt.Color;importjava.awt
  • 标签:C#

?

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

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

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

?

?

  • 相关文章
发表评论
用户名: 匿名