① Panel是一个面板类,用于将窗体分为几个模块,把窗体上的组件分到各个模块中,
JPanel draw_panel = new JPanel();//创建画图面板
//添加面板到窗口
frame.add(draw_panel);
② 写画图板的画笔和橡皮时需要按住拖动鼠标来画出鼠标移动轨迹,需要用MouseMotionListener中的方法
//添加鼠标移动监听对象
MouseMotionListener motion_listener = new MouseMotionListener()
{
public void mouseDragged(MouseEvent e) {//鼠标拖拽时触发事件
}
public void mouseMoved(MouseEvent e) {//鼠标移动时触发事件
}
};
③ 创建同类按钮对象可用循环写,使代码更简洁。
④ 调用按钮类的setActionCommand方法可以给按钮设置标记来区分同名的不同功能按钮。
//创建颜色数组
Color[]color = {Color.red,Color.pink,Color.orange,Color.yellow,Color.green,Color.blue,
newColor(100,100,200),Color.black,Color.gray,Color.white};
for(int i=0;i<10;i++)
{
JButton jbt_color = new JButton();//创建按钮
jbt_color.setBackground(color[i]);//设置按钮颜色
jbt_color.setPreferredSize(new Dimension(26,26));//设置按钮大小
jbt_color.setActionCommand("颜色"+i);//每个按钮设置不同的指令信息
color_panel.add(jbt_color);//添加颜色按钮到颜色面板
jbt_color.addActionListener(color_listener);//给颜色按钮添加监听对象
}
⑤ 在颜色按钮的动作监听事件中, 创建一个按钮对象保存点击的按钮,用按钮类的getBackground方法获取给按钮的背景颜色,从而把颜色按钮的颜色传给画笔。
JButton jbt = (JButton)e.getSource();//创建一个按钮对象来保存点击的按钮
g.setColor(jbt.getBackground());//获得按钮的背景颜色并用来改变画笔颜色
⑥ 画笔的实现方法,通过在鼠标拖动过程中不断画相邻两点的线段构成自定义的线条。
(刷子和橡皮的实现方法相似。)
public void mouseDragged(MouseEvent e) {//鼠标拖拽时的方法
x2 = e.getX();
y2 = e.getY();
if(cmd.equals("按钮7"))//当点击的按钮为画笔
{
//逐点画线
g.drawLine(x1,y1,x2,y2);
x1=x2;
y1=y2;
}
}
代码只完成 画笔、橡皮、画线段、椭圆、矩形、圆角矩形、选色功能
package com.huaxin.Draw;
import javax.swing.*;//引用窗体类包
import java.awt.*;//引用流式布局和监听器的包
import java.awt.event.*;//引用事件类的包
//定义画板类
class Draw{
Graphics g = null;//定义画笔
String cmd ="按钮11";//创建图形标记
String cmd2 ="黑色";//创建颜色按钮标记
int x1,x2,y1,y2,x3,y3;//创建点位坐标
//主函数
public static void main(String[] args){
//创建画板对象
Draw draw = new Draw();//创建画板对象
draw.showUI();//调用展示界面的方法
}
public void showUI()
{
JFrame frame = new JFrame("画板");//创建窗体
frame.setSize(500,500);//设置窗体大小
frame.setLocation(300,100);//设置窗体位置
FlowLayout layout = new FlowLayout();//创建线性布局对象
frame.setLayout(layout);//设置窗体为线性布局
JPanel draw_panel = new JPanel();//创建画图面板
JPanel color_panel = new JPanel();//创建颜色选择面板
JPanel shape_panel = new JPanel();//创建形状选择面板
//添加面板到窗口
frame.add(shape_panel);
frame.add(draw_panel);
frame.add(color_panel);
//设置面板颜色
shape_panel.setBackground(Color.blue);
draw_panel.setBackground(Color.WHITE);
color_panel.setBackground(Color.green);
//设置面板大小
shape_panel.setPreferredSize(new Dimension(80,370));
draw_panel.setPreferredSize(new Dimension(370,370));
color_panel.setPreferredSize(new Dimension(470,50));
//创建颜色数组
Color[] color = {Color.red,Color.pink,Color.orange,Color.yellow,Color.green,Color.blue,
new Color(100,100,200),Color.black,Color.gray,Color.white};
//创建按钮动作监听对象
ActionListener action_listener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
cmd = e.getActionCommand();//获取按钮上的指令
System.out.println(cmd);
}
};
//颜色按钮动作监听对象
ActionListener color_listener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
cmd2 = e.getActionCommand();//获取按钮上的指令
System.out.println(cmd2);
//判断点击颜色按钮的信息,将画笔设置为相应颜色
if(!(cmd2.equals("更多"))){
JButton jbt = (JButton)e.getSource();//创建一个按钮对象来保存点击的按钮
g.setColor(jbt.getBackground());//获得按钮的背景颜色 并用来改变画笔颜色
}
if(cmd2.equals("更多"))
{
Color DIYcolor = JColorChooser.showDialog(null, "更多颜色", Color.black);
g.setColor(DIYcolor);
}
}
};
//创建形状按钮
for(int i=1;i<=16;i++)
{
JButton jbt_shape = new JButton();//创建按钮
ImageIcon icon = new ImageIcon("image//"+i+"-1.png");//创建图标对象
jbt_shape.setIcon(icon);//设置按钮图标
jbt_shape.setPreferredSize(new Dimension(26,26));//设置按钮大小
jbt_shape.setActionCommand("按钮"+i);
shape_panel.add(jbt_shape);//添加形状按钮到面板
jbt_shape.addActionListener(action_listener);//给形状按钮添加监听对象
}
//创建颜色按钮对象
for(int i=0;i<10;i++)
{
JButton jbt_color = new JButton();//创建按钮
jbt_color.setBackground(color[i]);//设置按钮颜色
jbt_color.setPreferredSize(new Dimension(26,26));//设置按钮大小
jbt_color.setActionCommand("颜色"+i);//每个按钮设置不同的指令信息
color_panel.add(jbt_color);//添加颜色按钮到颜色面板
jbt_color.addActionListener(color_listener);//给颜色按钮添加监听对象
}
//创建自定义颜色按钮对象
JButton jbt_DIYcolor = new JButton("更多");
color_panel.add(jbt_DIYcolor);//添加到面板
jbt_DIYcolor.addActionListener(color_listener);//给颜色按钮添加监听对象
//创建鼠标监听事件对象
MouseListener mouse_listener = new MouseListener(){
public void mouseEntered(MouseEvent e){//鼠标进入时
}
public void mouseExited(MouseEvent e){//鼠标移出时
}
public void mouseClicked(MouseEvent e){//鼠标点击时
}
public void mousePressed(MouseEvent e){//鼠标按住时
x1=e.getX();//获取按住时的点位
y1=e.getY();
}
public void mouseReleased(MouseEvent e){//鼠标释放时
x2=e.getX();//获取释放时的点位
y2=e.getY();
if(cmd.equals("按钮11")){//判断所选按钮信息
g.drawLine(x1,y1,x2,y2);
//画直线
}
if(cmd.equals("按钮13")){
g.drawRect((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,Math.abs(x2-x1),Math.abs(y2-y1));
//画矩形
}
if(cmd.equals("按钮15")){
g.drawOval((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,Math.abs(x2-x1),Math.abs(y2-y1));
//画椭圆
}
if(cmd.equals("按钮16"))
{
//画圆角矩形
g.drawRoundRect((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,
Math.abs(x2-x1),Math.abs(y2-y1),Math.abs(x2-x1)/5,Math.abs(y2-y1)/5);
}
}
};
//添加鼠标移动监听对象
MouseMotionListener motion_listener = new MouseMotionListener()
{
public void mouseDragged(MouseEvent e) {//鼠标拖拽时的方法
x2 = e.getX();
y2 = e.getY();
if(cmd.equals("按钮7"))//当点击的按钮为画笔
{
//逐点画线
g.drawLine(x1,y1,x2,y2);
x1=x2;
y1=y2;
}
if(cmd.equals("按钮8"))//当点击的按钮为刷子
{
//逐点画线
g.drawOval((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,5,5);
g.fillOval((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,5,5);
x1=x2;
y1=y2;
}
if(cmd.equals("按钮3"))//当点击按钮为橡皮
{
//画白色圆形
g.setColor(Color.white);
g.drawOval((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,30,30);
g.fillOval((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,30,30);
x1=x2;
y1=y2;
}
}
public void mouseMoved(MouseEvent e) {//鼠标移动时实现方法
}
};
//给画图面板添加鼠标监听对象和鼠标移动监听对象
draw_panel.addMouseListener(mouse_listener);
draw_panel.addMouseMotionListener(motion_listener);
frame.setDefaultCloseOperation(3);//设置默认关闭操作
frame.setVisible(true);//设置窗体可见
g = draw_panel.getGraphics();//获取编辑面板的画笔!
}
};