`
然并卵-277
  • 浏览: 19475 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

简易xp画图板程序流程

阅读更多
关于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) {
		
	}


}

0
1
分享到:
评论

相关推荐

    仿XP画图板

    【标题】"仿XP画图板"是一款基于JAVA编程语言开发的应用程序,旨在模拟Windows XP操作系统中的经典画图工具。这个项目是为那些希望学习或熟悉GUI(图形用户界面)编程和事件处理的初学者设计的,同时也为用户提供了...

    java画图板程序代码

    Java 画图板程序设计与实现 Java 画图板是使用 Java 语言编写的图形绘制程序,提供了基本的绘图功能,如画笔、直线、椭圆、矩形等,用户可以使用该程序绘制简单的图形。下面我们将对 Java 画图板程序进行详细的分析...

    VB语言编写的简易画图板程序

    【VB语言编写的简易画图板程序】 VB(Visual Basic)是Microsoft开发的一种可视化的、面向对象的编程语言,尤其适合初学者入门。这个“简易画图板程序”利用VB的强大功能,创建了一个用户友好的图形界面,允许用户...

    JAVA简易画图板

    【JAVA简易画图板】是一个基于Java编程语言开发的简单绘图应用程序,它为用户提供了一个基本的图形界面,用户可以通过这个界面进行简单的绘画操作。这个程序包含了一些基本的绘图功能,如绘制形状、使用铅笔工具以及...

    简易画图板程序java

    【简易画图板程序java】是一个基于Java编程语言实现的简单图形绘制软件,它涵盖了图形学的基本概念和技术,为用户提供了一个交互式的平台,可以进行基本的图形绘制操作。这个程序的核心功能包括画直线、绘制圆以及对...

    MFC 简易画图板

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来创建一个简易的画图板应用程序。MFC 是微软为Windows平台提供的一种C++类库,它简化了Windows API的使用,使得开发Windows应用程序更加高效...

    VC做的画图板程序用VC的MFC做的一个画图板程序

    【VC做的画图板程序】是一个基于Microsoft Visual C++(简称VC)的MFC(Microsoft Foundation Classes)框架开发的应用程序。MFC是微软提供的一套C++类库,用于简化Windows应用程序的开发,它封装了Windows API,...

    基于VC++MFC程序设计——简易画图板

    ### 基于VC++MFC程序设计——简易画图板 #### 概述 本文档将详细介绍如何利用VC++中的MFC(Microsoft Foundation Classes)框架来开发一款简易的画图板应用程序。该画图板的主要功能包括但不限于图形的绘制、线型...

    QT简易画图板程序

    QT简易画图板程序是一个基于Qt库开发的简单图形绘制应用程序。Qt是一个跨平台的C++框架,广泛用于创建桌面、移动以及嵌入式设备的应用程序。本程序旨在提供一个基础的画图环境,用户可以在此基础上进行各种图形的...

    简易画图板程序(JAVA)

    一个简易的画图板程序,用JAVA语言实现。支持几种常见图形。界面中有个图形的快捷控件按钮

    用VC编的画图板程序

    【标题】"用VC编的画图板程序"是一个基于Microsoft Visual C++(简称VC)开发的图形用户界面应用程序,其功能与Windows操作系统内置的“画图”程序相似。这个程序提供了一个平台,用户可以在这里进行基本的图像绘制...

    基于对话框的画图板程序

    这里我们关注的是一个基于对话框的画图板程序,这与常见的单文档界面(SDI)画图板有所不同。对话框是一种在Windows编程中常用的设计元素,它提供了一个独立于主窗口的、用于用户交互的临时窗口。下面我们将深入探讨...

    C#画图板程序

    C#画图板程序是一种基于Microsoft .NET Framework的桌面应用程序,它允许用户通过鼠标或触控设备进行图形绘制。这个程序通常由C#编程语言编写,利用Windows Forms或WPF(Windows Presentation Foundation)框架来...

    仿WindowsXP画图板设计(1)

    【标题】"仿WindowsXP画图板设计(1)"是一个关于开发类似Windows XP操作系统中经典画图工具的项目。这个项目旨在帮助学习者理解和实践图形用户界面(GUI)设计、事件处理以及基本的绘图功能。 【描述】虽然描述为空...

    仿XP画图板.rar

    功能有: 1、工具栏中功能:截图并保存,橡皮擦,取色笔,铅笔,刷子,喷枪,文本框,直线,矩形,椭圆,圆角矩形等功能 2、颜色选择功能(2处):底部...4、清空画图面板的功能 5、打开图片,保存修改后的图片的功能

    一个简易的画图板代码

    在编程领域,创建一个简易的画图板是一个常见的练习项目,它可以帮助初学者理解图形用户界面(GUI)的原理和事件处理。这个“简易的画图板代码”可能使用了某种编程语言,如Python的tkinter库或者Java的Swing或...

    windows画图板程序源码

    《Windows画图板程序源码解析与探讨》 在计算机编程领域,Windows画图板程序是一种常见的学习和实践窗口应用程序设计的案例。本篇文章将深入剖析"windows画图板程序源码",揭示其背后的原理和技术,以帮助读者更好...

    java 画图板程序

    此画图板程序运用了类似photoshop界面,功能十分强大,界面优美,代码中带有解释易于理解,课程设计的不二选择。代码在workspace/oceanking/src中,只有一个文件,很适于初学者使用。

    VC的MFC做的一个画图板程序

    **VC的MFC画图板程序详解** 在计算机科学领域,可视化程序设计是软件开发的一种重要方式,它允许用户通过图形用户界面(GUI)来创建和编辑程序,大大降低了编程的难度。MFC(Microsoft Foundation Classes)是微软...

    简易CAD画图板;简易CAD画图板;简易CAD画图板;

    简易CAD画图板是一款专为初学者和非专业设计师设计的计算机辅助设计(CAD)软件。它简化了复杂的CAD操作,使用户能够快速上手,进行基本的二维绘图任务。这款工具通常包含了一些基本的绘图、编辑、测量和注释功能,...

Global site tag (gtag.js) - Google Analytics