`
确实比较男
  • 浏览: 112468 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

flex4 实现分隔栏 类似java里面的JSplitPane的功能

阅读更多

最近写flex4的项目,要用到一个类似java里面的JSplitPane那样的功能,也是一个分隔栏,能左右拖动来改变两边容器的大小 ,网上找了很久都没有找到有这样的。在找了一些资料后就自己写了一个,有什么需要改进的,希望大家说出来,交流下 ,能使它更完善。

主要是个btton实现的,这个button的皮肤可以自己定义

 

 

package util
{
	import flash.events.MouseEvent;
	import flash.geom.Point;
	
	import mx.core.Application;
	import mx.managers.CursorManager;
	import mx.managers.CursorManagerPriority;
	
	import spark.components.Button;
	import spark.components.Group;
	import spark.components.Window;
	
	public class SplitButton extends Button
	{
		
		//记录光标的id
		//记录在splitbutton上的光标id
		private var resizeCur:Number = 0;
		//记录在父容器上的光标id
		private var parentCur:Number = 0;

		//原来的坐标位置
		private var oPoint:Point = new Point;
		//新坐标的位置
		private var nPoint:Point = new Point;
		
		//鼠标光标的图标  光标的偏移量
		private var _cussor:Class;
		private var _offX:Number = -20;
		private var _offY:Number = -22;
		
		
		//与分隔栏相关联的容器  
		private var parentWindow:Window;
		//要控制的两个容器
		private var oneGroup:Group;
		private var anotherGroup:Group;
		
		
		//控制的两个容器的最小高度  宽度
		private var _oneGroupMinWidth:Number;
		private var _oneGroupMinHeight:Number = 50;
		private var _anotherGroupMinWidth:Number;
		private var _anotherGroupMinHeight:Number = 30;
		
		//判断分隔栏是否横放的
		private var _isHorizontal:Boolean = true;
		
		public function SplitButton(parent:Window,oneGroup:Group,anotherGroup:Group)
		{
			this.parentWindow = parent;
			this.oneGroup = oneGroup;
			this.anotherGroup = anotherGroup;
			
			
			this.addEventListener(MouseEvent.MOUSE_OVER, splitButtonOverHandler);
			this.addEventListener(MouseEvent.MOUSE_OUT, splitButtonOutHandler);
			this.addEventListener(MouseEvent.MOUSE_DOWN, splitButtonDonwHandler);
			
		}
		
		
		protected function splitButtonOverHandler(event:MouseEvent):void
		{
			// 鼠标移动上来的事件
			this.resizeCur = parentWindow.cursorManager.setCursor(_cussor,2,_offX,_offY);
		}
		
		protected function splitButtonOutHandler(event:MouseEvent):void
		{
			// 鼠标移除的事件
			parentWindow.cursorManager.removeCursor(this.resizeCur);
		}
		
		protected function splitButtonDonwHandler(event:MouseEvent):void
		{
			// 鼠标按下的事件
			parentWindow.addEventListener(MouseEvent.MOUSE_MOVE, resizeGroupMoveHandler);
			parentWindow.addEventListener(MouseEvent.MOUSE_UP, resizeGroupUpHandler);
			
			//设置在parentWindow下的光标样式 
			this.parentCur = parentWindow.cursorManager.setCursor(_cussor,2,_offX,_offY);
			
			oPoint.x = mouseX;
			oPoint.y = mouseY; 
			oPoint = this.localToGlobal(oPoint);
		}
		
				
		
		protected function resizeGroupMoveHandler(event:MouseEvent):void
		{
			// 移动splitButton  来改变显示区域的大小 
			nPoint.x = mouseX;
			nPoint.y = mouseY;
			nPoint = this.localToGlobal(nPoint);
			
			
			if(_isHorizontal){
				//是横放的
				var yPlus:Number = nPoint.y - oPoint.y;
				if (oneGroup.height + yPlus > _oneGroupMinHeight 
						&& anotherGroup.height - yPlus > _anotherGroupMinHeight) {
					oneGroup.height = oneGroup.height + yPlus;
					anotherGroup.height = anotherGroup.height - yPlus;
				}
			}else{
				//竖放的
				var xPlus:Number = nPoint.x - oPoint.x; 
				if (oneGroup.width + xPlus > _oneGroupMinWidth
						&& anotherGroup.width - xPlus > _anotherGroupMinWidth) {
					oneGroup.width = oneGroup.width + xPlus;
					anotherGroup.width = anotherGroup.width - xPlus;
				} 
			}
			
			
			oPoint.x = mouseX;
			oPoint.y = mouseY; 
			oPoint = this.localToGlobal(oPoint);
			
		}
		
		
		protected function resizeGroupUpHandler(event:MouseEvent):void
		{
			// 移除绑定的事件  和  光标样式
			parentWindow.removeEventListener(MouseEvent.MOUSE_MOVE, resizeGroupMoveHandler);
			parentWindow.removeEventListener(MouseEvent.MOUSE_UP, resizeGroupUpHandler);

			parentWindow.cursorManager.removeCursor(this.parentCur);
		}
		
	
		public function set cussor(value:Class):void
		{
			_cussor = value;
		}

		public function set offX(value:Number):void
		{
			_offX = value;
		}

		public function set offY(value:Number):void
		{
			_offY = value;
		}

		public function set oneGroupMinWidth(value:Number):void
		{
			_oneGroupMinWidth = value;
		}

		public function set oneGroupMinHeight(value:Number):void
		{
			_oneGroupMinHeight = value;
		}

		public function set anotherGroupMinWidth(value:Number):void
		{
			_anotherGroupMinWidth = value;
		}

		public function set anotherGroupMinHeight(value:Number):void
		{
			_anotherGroupMinHeight = value;
		}

		
	}
}

 

上面这个是主要的类,下面说下怎么用这个类:

 

 

var splitButton:SplitButton = new SplitButton(this,msgGroup,msgEdit);
				splitButton.percentWidth = 100;
				splitButton.height = 3; 
				splitButton.setStyle("skinClass",skin.button.SplitButtonSkin);
				splitButton.cussor = this.bottomTop;
				splitButton.oneGroupMinHeight = 50;
				splitButton.anotherGroupMinHeight = 30;
				splitButton.offX = -20;
				splitButton.offY = -22;

 

 

 

不知道怎么把效果图放上来     有人知道请教下我   因为我也是刚在这个上面写没多久

 

把效果图片都上传到附件里面的

 

图片上面有个上下箭头  那个就是鼠标移动在splitButton上面的鼠标样式

 

 

 

 

 

  • 大小: 205.1 KB
  • 大小: 207.6 KB
分享到:
评论

相关推荐

    JSplitPane

    JSplitPane

    java swing-JSplitPane的使用

    JSplitPane是Swing库提供的一个分割面板组件。它可以在图形界面中创建两个子组件,并允许用户通过拖动分割条来调整子组件的大小。

    JSplitPane的用法

    JSplitPane的具体用法,分隔面板的使用,适合初学者。若是有更深层的见解,请作补充

    Java Swing中的工具栏(JToolBar)和分割面版(JSplitPane)组件使用案例

    主要介绍了Java Swing中的工具栏(JToolBar)和分割面版(JSplitPane)组件使用案例,本文直接给出代码实例和效果截图,需要的朋友可以参考下

    Java制作浏览器和源代码查看器.rar

    Java制作的网页浏览器和源代码查看器,仿IE的网页浏览功能,不支持HTML5,窗口采用上下分屏显示的方式,上面显示网页浏览器,下面显示该网页的源代码,JTextField jtfAddress; //输入html文件地址或网址  ...

    Java实现文字随意拖动.rar

    Java实现文字随意拖动,随处拖动文本字符,移动到任意位置,super("文本的拖动处理"); //调用父类构造函数  String[] data = {"one", "two", "three", "four"}; //字符数组,用于构造列表框  DragList list=new...

    疯狂JAVA讲义

    1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6 1.3.2 Java程序的运行机制和JVM 6 1.4 开发...

    界面标准的JAVA日历记事本

    2 主窗体的显示,JFRAME 类实现,JSplitPane.HORIZONTAL_SPLIT类将主窗体左右分割 3 JPanel 应用 创建 LEFT 1 2 3,RIGHT 1 2 3来添加左右窗体 4 获取当前日期Calendar类实现 Calendar.Year Calendar.Month ...

    java项目之教务管理系统

    import java.awt.AWTException; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Dimension; import java.awt.GridBagLayout; import java.awt.MenuItem; import java.awt.PopupMenu; ...

    JAVA JTREE JTABLE实例代码

    JAVA JTREE实例代码、JAVA JTABLE实例代码

    UISplitPane - 将一个容器 (figure/frame/uipan el) 拆分为两个可调整大小的子容器:将一个容器 (figure/frame/uipanel) 拆分为两个可调整大小的子容器,就像 Java 的 JSplitPane-matlab开发

    句法: [h1,h2,hDivider] = uisplitpane(hParent,'propName',propVal,...) 描述: UIPLITPANE 将指定的容器(图形、面板或框架,由句柄 hParent 引用)拆分为由可移动分隔线分隔的两个不同的窗格(面板)。...

    java pdf 查看器

    * $Id: PDFViewer.java,v 1.10 2009-08-07 23:18:33 tomoke Exp $ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * This...

    java实现连学生信息管理系统

    一个JSplitPane,左边JTree,右边JTable。实现学生管理系统 连接数据库获取数据表

    Java程序设计复习题.docx.docx

    JsplitPane 有一段java应用程序,它的主类名是Abe,那么保存它的源文件名可以是。 abc. java B. Abe. class C. Abe. java D.以上都可以 Java程序设计复习题全文共19页,当前为第2页。Java程序设计复习题全文共19页,...

    Java开发技术大全 电子版

    14.7.3分隔板(JSplitPane)使用示例482 14.7.4选项板(JTabbedPane)使用示例485 14.7.5工具栏(JToolBar)使用示例486 14.8常用组件488 14.8.1标签(Jlabel)使用示例488 14.8.2按钮(JButton)使用示例491 ...

    java界面程序代码

    splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,scroll1,scroll2); splitPane.setOneTouchExpandable(true); splitPane.setDividerLocation(200); this.getContentPane().add(splitPane,null);}...

    Java JTree+JTable应用

    java JTree+JTable使用样例,实现将JTree的节点内容显示到JTable中,eclipse导入maven项目 maven编译: mvn clean package

    基于Swing的类似编辑器的界面

    基于Swing的类似编辑器的界面,java培训时的作业。 其中显现了可关闭的选项卡面板、复制文件功能、滚动面板的实现,功能比较简单。但自己觉得可以整理为自己的控件库。

    java-swing 学习代码

    如何使用面板组件 使用JPanel 使用JScrollPane 使用JSplitPane 使用JTabbedPane 使用JIntemalFrame 使用JLayeredPane 使用JRootPane

Global site tag (gtag.js) - Google Analytics