?
以下是简单画板实现的步骤和一些自己得心得体会:
一.实现简单画板的步骤:
1.定义一个类,该类继承JFrame类。
2.定义一个现实界面的方法,在方法中设置窗体的属性。
3.实例化按钮,将按钮添加到窗体上。
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;?
?