关于xp简易画图板程序流程:
1.创建主窗口 设置大小、标题、关闭方式并显示可见
2.指定主窗口布局方式为 边框布局
3.创建左边工具选择面板、中间绘图面板、底部颜色选择面板
设置颜色、大小并将面板加到主窗口中 指定放的位置[东西南北中]

中间绘图面板的实现:
1.创建绘图主面板drawpanel 设置大小、颜色并将drawpanel加到中间面板上
(为了使绘图主面板始终在中间面板上的左上角,指定布局为FlowLayout.LEFT)
2.创建DrawListener监听器 实现MouseListener接口
3.通过构造函数 共享drawpanel
4.创建Graphics对象g g=draw.getGraphics();获取在drawpanel绘图的权限
5.在mousePressed()、mouseReleased()中分别获取坐标
调用函数g.drawLine(x1, y1, x2, y2);就可以画直线
(直线、矩形、椭圆可以调用函数,其他的还没有实现...)

左边工具选择面板的实现:
1.创建单选按钮 加到左边面板上 设置唯一标识
2.创建按钮组对象 所有单选按钮加到按钮组对象中 给单选按钮进行逻辑分组
(其中一个单选按钮设置默认选中(setSelected)防止出现空指针的错误)
3.给按钮添加图片 调用这四个方法 setIcon() setRolloverIcon()
setPressedIcon() setSelectedIcon()
4.在DrawListener监听器中,通过构造函数 共享按钮组对象group
group.getSelection();方法返回被选中的按钮模型
5.model.getActionCommand();获得动作命令
根据动作命令 调用不同方法实现不同的功能

底部颜色选择面板:
1.创建前景色、后景色标签 使用绝对定位布局 设置位置、颜色、可见(setOpaque)
添加到底部面板中
2.创建选色板标签 设置位置、颜色、可见并添加到底部面板中
每个选色板标签添加颜色监听器
3.颜色监听器实现MouseListener接口 通过构造函数 共享前景色、后景色标签
4. e.getSource()获取事件源对象 强制转化为JLabel 获取当前背景颜色
5.e.getButton()获取鼠标是左键还是右键
将当前背景颜色传给前景色标签或者后景色标签
6.DrawListener监听器 通过构造函数 共享前景色标签和后景色标签
从前景色、后景色标签获取到前景色、后景色
7.再通过判断鼠标左键还是右键 把前景色或者后景色赋给g.setColor()中的参数
设置最终在绘板呈现出的颜色
(选色板标签通过鼠标左键或右键将颜色给前景色或后景色标签
通过前景色或后景色标签上的颜色决定了画板上呈现的颜色)



import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Graphics;

import javax.swing.ButtonGroup;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JRadioButton;

public class DrawUI {public static void main(String[] args) {  JFrame jf=new JFrame();  jf.setSize(600, 500);     jf.setTitle("XP画图板");   jf.setDefaultCloseOperation(3);     //指定窗口布局为边框布局   BorderLayout layout=new BorderLayout();  jf.setLayout(layout);     //添加一个用来绘图的面板     JPanel panelleft=new JPanel();   panelleft.setBackground(Color.blue);  Dimension dimleft=new Dimension(100,1);  panelleft.setPreferredSize(dimleft);

  JPanel panelcenter=new JPanel();     panelcenter.setBackground(Color.gray);    //中间组件大小没有意义//    Dimension dimcenter=new Dimension(1,1);//    panelcenter.setPreferredSize(dimcenter);

  JPanel panelfoot=new JPanel();  // panelfoot.setBackground(Color.green);   Dimension dimfoot=new Dimension(1,100);  panelfoot.setPreferredSize(dimfoot);

  //把面板添加到窗口中,指定放的位置【东西南北中】  jf.add(panelleft,BorderLayout.WEST);  jf.add(panelcenter,BorderLayout.CENTER);  jf.add(panelfoot,BorderLayout.SOUTH);

   //*********************给左边的面板添加形状选择工具***********************//    //按钮组对象,给单选按钮进行逻辑分组    ButtonGroup  group =new ButtonGroup();   String[] strs = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",             "line", "11", "rect", "13", "oval", "15" };     for(int i=0;i<16;i++){     JRadioButton button1=new JRadioButton();     panelleft.add(button1);//加在左边面板上  group.add(button1);//添加分组     button1.setActionCommand(strs[i]);//设置唯一标识    button1.setSelected(true);//设置默认选中    //设置按钮的图片     ImageIcon defaultIcon=new ImageIcon("img/draw"+i+".jpg");  button1.setIcon(defaultIcon);

   ImageIcon rolloverIcon=new ImageIcon("img/draw"+i+"-1.jpg");   button1.setRolloverIcon(rolloverIcon);

  ImageIcon pressedIcon=new ImageIcon("img/draw"+i+"-2.jpg");    button1.setPressedIcon(pressedIcon);

    ImageIcon selectedIcon=new ImageIcon("img/draw"+i+"-3.jpg");   button1.setSelectedIcon(selectedIcon);

}       //*****************给中间的面板添加绘图面板***************************//

    JPanel  drawpanel=new JPanel();  Dimension drawdim=new Dimension(400,300);    drawpanel.setPreferredSize(drawdim);  drawpanel.setBackground(Color.white);

   //流式布局是添加在中间面板上的  //面板默认的布局为流式布局    //指定中间面板的布局为流式布局左对齐   FlowLayout  drawlayout =new FlowLayout(FlowLayout.LEFT);     panelcenter.setLayout(drawlayout);    panelcenter.add(drawpanel);   //********************给底部的面板添加颜色选择工具***********************//        JLabel frontLabel=new JLabel();      JLabel backLabel=new JLabel();        //使用绝对定位布局       panelfoot.setLayout(null);        //定义frontLabel的位置和大小      frontLabel.setBounds(50, 20,40,60);       backLabel.setBounds(110, 20,40,60);       //设置背景颜色      frontLabel.setBackground(Color.black);        backLabel.setBackground(Color.BLUE);      //是否允许背景色显示出来     frontLabel.setOpaque(true);       backLabel.setOpaque(true);

      panelfoot.add(frontLabel);        panelfoot.add(backLabel);

       Color[] cs = { Color.BLACK, Color.GRAY, new Color(128, 0, 0),                Color.RED, new Color(255, 128, 0), Color.YELLOW, Color.GREEN,             new Color(0, 128, 255), Color.BLUE, Color.MAGENTA, Color.BLACK,               Color.GRAY, new Color(128, 0, 0), Color.RED,              new Color(255, 128, 0), Color.YELLOW, Color.GREEN,                new Color(0, 128, 255), Color.BLUE, Color.MAGENTA };

      ColorListener mlis = new ColorListener(frontLabel, backLabel);      //选色板      for(int i=0;i<20;i++){          JLabel colorLabel=new JLabel();          //给colorLabel添加鼠标监听器          colorLabel.addMouseListener(mlis);            if(i<10){              colorLabel.setBounds(160+30*i,20,25,25);         }         else {                colorLabel.setBounds(160+30*(i-10),50,25,25);            }             colorLabel.setBackground(cs[i]);              colorLabel.setOpaque(true);             panelfoot.add(colorLabel) ;             }

    jf.setVisible(true);

  //由于是绘制在drawpanel上的,所以只需要给drawpanel添加鼠标监听器     DrawListener listener=new DrawListener(drawpanel, group,frontLabel,backLabel);   //给面板添加鼠标监听器  drawpanel.addMouseListener(listener);

}}

import java.awt.Color;import java.awt.Graphics;

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

import javax.swing.ButtonGroup;import javax.swing.ButtonModel;import javax.swing.JLabel;import javax.swing.JPanel;

public class DrawListener  implements MouseListener {          private int x1,x2,y1,y2;          private Graphics g;          private JPanel drawpanel;          private ButtonGroup group;          private String str="line";          private Color frontColor = Color.RED;// 要绘制的前景色           private Color backColor = Color.BLUE;// 背景色          private JLabel frontLabel;            private JLabel backLabel;

       //通过构造方法实现不同类中私有变量的共享         public DrawListener(JPanel drawpanel1,ButtonGroup group1,JLabel fLabel, JLabel bLabel){            drawpanel=drawpanel1;            group=group1;            frontLabel = fLabel;                 backLabel = bLabel;            }

    public void mousePressed(MouseEvent e) {          //鼠标按下准备绘制图形的时候先获取能绘制的区域【画布】          //获取drawPanel在屏幕上占据的区域,作为可以改变颜色的区域          g=drawpanel.getGraphics();

      // 获得背景色和前景色          frontColor = frontLabel.getBackground();         backColor = backLabel.getBackground();

         // 获得鼠标点击的是左键还是右键         int num = e.getButton();         if (num == 1) {             // 获得要绘制的颜色               g.setColor(frontColor);           } else if (num == 3) {              g.setColor(backColor);            }         // 鼠标按下准备绘制的时候来确定要绘制的图形           // 获得被选中的按钮模型        ButtonModel model=group.getSelection();           // 获得动作命令[每一个按钮的唯一标识]        str=model.getActionCommand();

          // str=group.getSelection().getActionCommand();          x1=e.getX();         y1=e.getY();          } public void mouseReleased(MouseEvent e) {       x2=e.getX();         y2=e.getY();       // 绘制图形         if(str.equals("line")){             g.drawLine(x1, y1, x2, y2);                   }         else if(str.equals("rect")){            int x=x1<x2?x1:x2;            int y=y1<y2?y1:y2;            int width=x1<x2?x2-x1:x1-x2;              int height=y1<y2?y2-y1:y1-y2;             g.drawRect(x, y, width, height);          }         else if(str.equals("oval")){            int x=x1<x2?x1:x2;            int y=y1<y2?y1:y2;            int width=x1<x2?x2-x1:x1-x2;              int height=y1<y2?y2-y1:y1-y2;             g.drawOval(x, y, width, height);              }

 }

   public void mouseClicked(MouseEvent e) {

    } public void mouseEntered(MouseEvent e) {

    } public void mouseExited(MouseEvent e) {

 }

}

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

import javax.swing.JLabel;/** * 颜色选择的监听器 * @author Administrator * */public class ColorListener implements MouseListener{

    private JLabel frontLabel;    private JLabel backLabel;

   public ColorListener(JLabel fLabel, JLabel bLabel) {      frontLabel = fLabel;     backLabel = bLabel;  } public void mouseReleased(MouseEvent e) { //获得事件源对象:发生事件的组件    //由于监听器是加在JLabel上的,所以事件源对象一定是JLabel  JLabel label=(JLabel)e.getSource();  //获得背景颜色    Color c=label.getBackground();    //获得鼠标是左键还是右键     int num=e.getButton();     if(num==1){         frontLabel.setBackground(c);     }     else if(num==3){         backLabel.setBackground(c);     }  } public void mousePressed(MouseEvent e) {

    }

 public void mouseEntered(MouseEvent e) {

    }

   public void mouseExited(MouseEvent e) {

 }

   public void mouseClicked(MouseEvent e) {

    }

}

简易xp画图板程序流程相关推荐

  1. 基于JavaSwing开发简单的画图板程序 课程设计 大作业源码

    基于JavaSwing开发简单的画图板程序:  (大作业) 开发环境: Windows操作系统 开发工具: MyEclipse+Jdk 运行效果图: 基于JavaSwing开发简单的画图板程序:  ( ...

  2. 仿制Windows画图板程序

    仿制Windows画图板程序 控件 代码 效果图 控件 新建一个Windows窗体应用程序,将窗体Form1调整到适当大小,在窗体Form1中分别添加1个Panel.1个PictureBox和1个St ...

  3. 一个Java画图板程序的设计

    本文讲述一个画图板应用程序的设计,屏幕抓图如下.这篇文章带有三个附件,其中两个jar文件都是j2sdk1.4.2_08编译打包,包含源代码,可执行,如下表: 附件名称及链接 详情 jDraw_basi ...

  4. 简单python代码讲解-使用Python编写简单的画图板程序的示例教程

    从这次开始,我会由简单到困难(其实也不会困难到哪里去)讲几个例程,每一个例程都是我自己写(或者修改,那样的话我会提供原始出处)的,都具有一定的操作性和娱乐性.例程中汇尽量覆盖到以前所讲的pygame中 ...

  5. Android 画图板程序实例(SketchPad)

    最近没什么事情,写过一个画图板的DEMO(sketchpad),发出来与大家分享. 功能说明: 1.能画线(Pen),能擦除(Eraser),清除(Clear). 2.Undo,Redo功能. 3.保 ...

  6. 画图板程序c语言,【原创】画图板程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include #define PAINTAREA 1//画图区标志 #define CASEAR ...

  7. java,制作简易画图板

    简易画图板 前些日子,我学习了关于xp系统简易画图板的制作,虽然我写的画图板功能不多,但这是我接触java以来完成的第一个项目,制作的时候感觉很艰难,有的时候明明知道思路,却因为不知道具体的方法而走了 ...

  8. 简易画图板的升级版本1.2

    自打上次做了画图板之后已经很久没更新了,原因可能是因为我老是觉得自己的java烂到爆,总想着以后再去解决.但是事情不该拖的.反正,今天总算是解决了.如释重负吧.不过,这个鬼东西,闲着没事的时候我还会继 ...

  9. qt制作一个画板_基于Qt的画图板的设计与实现(含录像)

    基于Qt的画图板的设计与实现(含录像)(任务书,开题报告,外文翻译,毕业论文20000字,程序代码,答辩PPT,答辩视频录像) 摘要 本文的主要内容是记述画图板的设计与实现课程设计中的一些关键技术和辅 ...

最新文章

  1. Chromosome-scale assemblies of plant genomes using nanopore long reads and optical maps
  2. 项目问题思考之策略模式
  3. 以supervisord启动elasticsearch
  4. 在命令行中管理 Wifi 连接
  5. 一、搭建Extjs 4.1开发环境
  6. PyTorch教程(九):损失函数与Loss的梯度
  7. QQ协议调试器 QQDebugger
  8. 使用virt-install安装kvm虚拟机时需要的问题
  9. 【Python】Python实战从入门到精通之七 -- 教你深入理解异常处理
  10. TOP 10 开源的推荐系统简介
  11. 前n个正整数相乘的时间复杂度为_初一数学常考的21个知识点,掌握好,轻松110+!...
  12. gitlab 安装_安装Gitlab-注意端口
  13. graphics2d 乱码 java_java Graphics2D绘制文字并居中并解决服务器乱码问题
  14. CocosBuilder学习之一:认识CocosBuilder
  15. php变量控制结构与函数,LAMP兄弟连原创视频教程(PHP笔记一--变量,流程控制结构,函数)...
  16. 企业网站制作多少钱、企业网站需要多少钱、建立网站需要花多少钱
  17. 台式主机插入耳机没声音
  18. 获取java可用时区列表ZoneId
  19. Drupal简明教程
  20. python 渐变色_python – 用渐变颜色的散景散点图

热门文章

  1. 微信小程序,map地图中在底部添加半透明视图布局
  2. 相机PHP,C/C++、C#、PHP相机开发实例 大恒相机SDK
  3. Java初学者的学习路线建议
  4. iphone ios 视频特效,视频合成
  5. 2018 CCPC网络赛1004 HDU6441 Find Integer
  6. docker容器下载及配置
  7. Java中的switch
  8. 百度是如何给每个人免费提供2TB存储空间的?
  9. weui 自定义datepicker 年月日 上午下午 四级联动的实现
  10. java解压rar5 兼容rar4(改bug)