`
sophine.su
  • 浏览: 5440 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

走在仿XP画图板的大道上(续)

阅读更多

     假期结束,学习速度直线下降,翻翻之前写的包的日期最近的才九月中下旬开始的仿XP画图板。伴随着各种节假日,加之学校繁重的学习和其他任务,程序进程一拖再拖。和朋友聊发现大家都会因为自己没有尽心学编程而内心产生负罪感,这种罪恶感和愧疚感最终会演变成自身懒惰的最佳接口,而编程也会成为那不可言状的伤,不去触碰。

     可是不管你敲不敲代码,半截程序就放在那里,不增不减,不多不少。所以我总结了最后还是必须继续走在这条大道上,天天得到一种自我的感动~

     下面还是说说我的程序吧:

     JAVA入门是以简易的画图板入手的,所以在仿XP的中有了一个大体思路。

  • 窗体界面的实现。
  • 界面的分栏,主要三个板块——工具栏、颜色选择栏和画图面板三大块。(这里当然还要和之后的监听器扯到关系。)
  • 菜单选择栏的添加
  • 各板块功能的实现,监听器的使用。
  • 重绘,图形的保存。

      个人认为在写java代码的时候,每个类之间的关系是最头痛的,往往是在写一个类的时候突然又要引进另外一个具有其他功能的类或者方法,就这样在传来传去中搞得晕头转向。所以我也就通俗简单的说说自己写的吧。

  1. 创建一个主函数来调用窗口。
    //创建一个主函数来调用窗口
    	public static void main(String args[]){
    		DrawUI di = new DrawUI();
    		di.initUI();
    	}
     那么,当然必须要有一个窗口函数来实现了。在窗口中首先是最直观的就是他的名称,窗口大小,以及窗口内容的可显示,显示位置以及大小是否可以改变。
    	public void initUI(){
    		this.setTitle("画图板v2.0");
    		this.setSize(new Dimension(700,600));
    		this.setDefaultCloseOperation(3);
    		this.setLocationRelativeTo(null);
                    }
     这些都是非常基础和简单的,没有太多要详述的部分。
  2. 接着窗体要划分为三个大的板块,用JPanel来完成分块,顺带setJMenuBar来创建一个菜单栏。在三个板块中的亮点是用边框布局让三块各就其位,
                                     this.setJMenuBar(createMenuBar());
    		//实例化一个边框布局对象
    		BorderLayout bl = new BorderLayout();
    
    		//设置窗体的布局为边框布局
    		this.setLayout(bl);
    
    		//窗体上获得一个画布对象
    		java.awt.Graphics g = this.getGraphics();
    
    		//实例化一个工具栏对象
    		ToolPanel tp = new ToolPanel();
    		this.add(tp,BorderLayout.WEST);
    		//实例化一个颜色选择栏对象
    
    		ColorPanel cp = new ColorPanel();
    		this.add(cp,BorderLayout.SOUTH);
    		//实例化一个画图版面对象
    
    		DrawPanel dp = new DrawPanel();
    		this.add(dp,BorderLayout.CENTER);
    		this.setVisible(true);
     下面是菜单选择栏的方法
    //创建菜单的方法
    	public JMenuBar createMenuBar(){
    		JMenuBar jmb = new JMenuBar();
    		//创建一个一维数组放三个选项
    		String[] arrayMenuFile = {"文件","颜色","帮助","编辑"};
    		//创建一个二维数组放每个选项中的子选项
    		String[][] arrayMenuItem = {{"新建","打开","保存","-","退出"},
    				{"编辑颜色"},{"帮助主题","关于画图"},{"撤销"}};
    		//开始循环然后将每个选项放入按钮中
    		for(int i = 0;i < arrayMenuFile.length;i++){
    			//创建菜单对象
    			JMenu menufile = new JMenu(arrayMenuFile[i]);
    			for(int j = 0;j < arrayMenuItem[i].length;j++){
    				if(!arrayMenuItem[i][j].equals("-")){
    					//创建一个子菜单对象
    					JMenuItem jmt = new JMenu(arrayMenuItem[i][j]);
    					menufile.add(jmt);
    					ButtonListener bl = new ButtonListener(jmb);
    					jmb.addMouseListener(bl);
    				}else{
    					//给菜单加分隔符号
    					menufile.addSeparator();
    				}
    			}
    			//将子菜单添加在菜单上
    			jmb.add(menufile);
    		}
    		return jmb;
    	}
     现在的代码已近是框架出来了,在之前两手空空写JPanel时,当然还要写工具栏,颜色选择栏和画板三个类,也就是上面代码实现对象时候出现的。(好晚了,写不动了,都怪之前的懒惰堆积这么多总结,明天继续,安~)

学校事情忙了一天,忙里偷闲继续昨天未完成的总结。

首先是三个面板上的显示和功能的实现,这里通过鼠标监听器来实现对面板内按钮或者其他事件的操作。他们是在窗体的方法中调用。

  • 这是工具栏,利用网格布局,这种方法的好处是可将其中的板块割分成需要的个数,然后用一层for循环遍历一遍,将已近制作好的工具图片传入。我在这里放入了16种图片,也就是有16种画图功能,其中我是将按钮的大小完全设置成为了图片的大小,所以看起来就还算靠谱了,不过工具栏的这些功能还在监听器的类中进展中,实现了一多半了。
    public class ToolPanel extends JPanel {
    	
    	//用户选择图形的属性
    	private String item = "10直线";
    	//获取图形的方法
    	public String getItem(){
    		return item;
    	}
    	/**
    	 * 构造器方法
    	 */
    	public ToolPanel(){
    		//创建一个动作监听器对象
    		ActionListener alr = new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				//接口ActionLiatener的方法
    				item = e.getActionCommand();
    			}
    		};//这是方法中的一个语句,所以需要加分号
    		
    		//创建一个panel对象
    		JPanel panel = new JPanel();
    		panel.setLayout(new GridLayout(8,2));
    		panel.setPreferredSize(new Dimension(50,200));
    		String[] Arr = {"0多边形","1矩形","2橡皮","3填充","4吸管",
    				"5放大镜","6铅笔","7刷子","8喷枪","9文字","10直线","11曲线",
    				"12实心矩形","13实心多边形","14实心圆","15实心圆角矩形"};
    		//循环创建的对象,并且将图片传入按钮
    		for(int i = 0;i < Arr.length;i++){
    			ImageIcon icon = new ImageIcon("src/img/"+Arr[i]+".jpg"); 
    			JButton button = new JButton(icon);
    			button.setBorder(null);
    			button.setActionCommand(Arr[i]);
    			button.addActionListener(alr);
    			button.setSize(new Dimension(15,15));//给按钮设置大小
    			panel.add(button);
    		}
    		
    		this.setLayout(new FlowLayout());
    		this.add(panel);
    	
    	}
    }
    
     

 我在颜色选择栏和工具栏按钮的图片传入选择了两种方法,工具栏是直接传入,而颜色栏我选择了又另写一个Config的类里面放一些程序中用的常量,然后在其他类里需要的时候直接调用,这样做的好处是在日后的程序修改时容易操作。这一部分在监听器中还未实现额。

import javax.swing.ImageIcon;

public class Config {
	
	//public static ImageIcon[] ICONS1 = new ImageIcon[16];
	public static ImageIcon[] ICONS2 = new ImageIcon[32];
	
	static{
			for(int j=16;j<32;j++) {
		
				javax.swing.ImageIcon image = new javax.swing.ImageIcon(				//
				Config.class.getClassLoader().getResource("img/"+j+".jpg"));
				image.setDescription(""+j);//用一个描述方法来得到图片的一个描述方法
				ICONS2[j] = image;//得到一个像商标一样的标签贴给数组中的元素
			}
	}

	
}
  •  这是Config中颜色栏的图片。

    public class ColorPanel extends JPanel{
    	/**
    	 * 构造器添加颜色按钮
    	 */
    	public ColorPanel(){
    		//将颜色选择栏靠左放置
    		this.setLayout(new FlowLayout(FlowLayout.LEFT));
    		//创建一个panel对象
    		JPanel panel1 = new JPanel();
    		panel1.setLayout(null);
    		panel1.setPreferredSize(new Dimension(30,30));
    		//创建两个按钮对象
    		JButton btn1 = new JButton();
    		btn1.setBounds(5, 5, 16, 16);
    		JButton btn2 = new JButton();
    		btn2.setBounds(10, 10, 16,16 );
    		panel1.add(btn1);
    		panel1.add(btn2);
    		panel1.setBackground(Color.LIGHT_GRAY);
    		
    		JPanel panel2 = new JPanel();
    		panel2.setLayout(new GridLayout(2,8,3,3));
    		panel2.setPreferredSize(new Dimension(150,30));
    		panel2.setBackground(Color.LIGHT_GRAY);
    		
    		//循环创建的对象,并且将图片传入按钮
    		for(int j = 16;j < 32;j++){
    			ImageIcon image = Config.ICONS2[j];
    			//System.out.println("========>"+image.getDescription());
    			JButton button = new JButton(image);
    			button.setActionCommand(image.getDescription());//取得了图片的描述
    			button.setSize(new Dimension(15,15));
    			button.setBorder(null);
    			panel2.add(button);
    			
    		}
    		
    		this.add(panel1);
    		this.add(panel2);
    	}
    	
    }

    这里有一个细节就是颜色栏左下角的两个小方块,这里我分了两个Panel来分别放整个颜色条和颜色显示栏。

    • 下面是画图板面的实现了,这一部分较为简单,只需让背景初始色为白色即可。不过现在代码中已近将重绘方法写出,当时那还是没有达到这个层面的。
      public class DrawPanel extends JPanel{
      	/**
      	 * 构造器
      	 */
      	public DrawPanel(){
      		this.setBackground(Color.WHITE);
      	}
      	
      	
      	/**
      	 * 重绘的方法
      	 */
      	public void paint(Graphics g){
      		super.paint(g);
      		
      	}
      }
       先到这里,由于监听器里的东西还在继续添加,估计下次写又要有一段时间了,表达能力不好,代码写的水平也有限,又不上劲,希望自己在知道不足后克服主观的消极,刻苦努力!加油

     

     

     

     

     

     

     

     

     

     

    0
    2
    分享到:
    评论

    相关推荐

      仿XP画图板

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

      仿XP画图板.rar

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

      仿 XP 系统画图板

      使用JAVA来开发仿XP画图板,意味着该程序可以在任何安装了JAVA运行环境的平台上运行,体现了JAVA的“一次编写,到处运行”的特性。 2. **图形用户界面**(GUI):仿XP系统画图板的界面设计是其关键部分,开发者可能...

      仿WindowsXP画图板设计(1)

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

      C# 高仿 Windows 画图板

      在本文中,我们将深入探讨如何使用C#编程语言高仿Windows自带的画图板应用程序,实现各种绘图功能。这个项目旨在提供一个类似的用户界面和功能集,包括打开和保存图片、文字绘制、多种形状绘制、画刷和画笔操作、...

      仿XP系统 画图板

      【标题】"仿XP系统 画图板"指的是一个基于Java编程语言开发的图形用户界面应用,该应用设计和功能模仿了微软Windows XP操作系统中的“画图”程序。这个项目可能旨在帮助用户在现代计算机环境中体验到类似XP系统下...

      仿windows画图板

      【标题】"仿windows画图板"所涉及的知识点主要集中在使用Visual Basic(VB)编程语言来创建一个图形用户界面(GUI),模仿Windows操作系统自带的“画图”应用程序。这个项目旨在提供一个基本的绘图工具,让用户可以...

      仿XP系统画图板

      【仿XP系统画图板】是一款简易的图形编辑软件,设计灵感来源于经典的Windows XP系统自带的画图工具。它旨在为用户提供一个简单的图形绘制环境,让任何人都能轻松上手,进行基本的绘画创作或者简单的图像编辑操作。这...

      画图板 代码 画图板 代码 画图板 代码

      画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码...

      MATLAB仿真之画图板工具

      在"MATLAB仿真之画图板工具"中,我们将探讨如何利用MATLAB来构建这样一个画图板,并了解它在课设和系统仿真中的应用。 首先,MATLAB的图形功能是其核心特性之一。通过使用plot函数,我们可以绘制各种类型的二维和三...

      C# 仿window画图板

      标题 "C# 仿window画图板" 涉及的是使用C#编程语言开发的一个图形用户界面(GUI)应用程序,其设计灵感来源于Windows操作系统内置的“画图”工具。这个程序允许用户进行基本的图形绘制操作,如绘制线条、形状,并...

      学生制作的画图板

      用户在下载并解压后,可以获取到这个画图板的全部内容,从而在自己的设备上使用或研究。 综合以上信息,我们可以推测这个“学生制作的画图板”是一个专注于教育用途的图形编辑工具,它具有简洁的用户界面和丰富的...

      画图板,window画图板

      2. 工具选择:画图板提供了多种画笔、线条、形状工具,如直线、曲线、矩形、椭圆等,通过切换工具,可以在同一画布上实现不同的动态效果。 3. 透明度调节:用户可以调整画笔或填充的透明度,创造出渐变或半透明的...

      一个仿XP的画图板实现

      标题 "一个仿XP的画图板实现" 暗示我们即将探讨的是一个软件开发项目,这个项目的目标是创建一个类似微软Windows XP操作系统中的“画图”程序的复制品。这个程序可能包含了基本的绘图工具,如选择颜色、线条粗细、...

      仿 Windows画图板

      【标题】"仿 Windows画图板"是一款基于C#编程语言和WinForm框架开发的简易图形编辑工具,它模仿了Windows操作系统内置的“画图”应用程序的功能和界面,旨在为用户提供一个轻量级的绘图环境,同时也为编程初学者提供...

      java 画图板 windows画图板简单实现

      在Java编程语言中,实现一个简单的Windows画图板是一个经典的练习,它可以帮助初学者更好地理解图形用户界面(GUI)的设计以及事件处理机制。这个项目通常会涉及到Java的Swing库,这是一个用于创建桌面应用程序的GUI...

      仿windows画图程序

      在“仿windows画图程序”中,GUI将包括画布、颜色选择器、画笔大小选择器、橡皮擦、填充工具等元素,以模仿原版“画图”程序的功能。 3. **绘图和图形**:VB提供了Graphics类,它包含了一系列方法如DrawLine、...

      mspaint 仿微软画图板

      高仿微软画图板。可以实现画所有的几何图形以及喷墨,吸色等功能。画笔的颜色也可以自定义。还可以保存,打开图片文件进行编辑。 可以为java初学者作为课程设计或是交流学习。 无源码,下载课运行。有API。如果需要...

      简易画图板,仿windows自带的画图板

      简易画图板,仿windows自带的画图板,能画直线、圆、椭圆、多边形,矩形,圆角矩形,铅笔涂鸦,能在背景图上画图。可与背景一起保存为.bmp格式的图片。提供源代码,有详细的注解。有兴趣的朋友可以拿去修改并完善。

    Global site tag (gtag.js) - Google Analytics