最近写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是Swing库提供的一个分割面板组件。它可以在图形界面中创建两个子组件,并允许用户通过拖动分割条来调整子组件的大小。
JSplitPane的具体用法,分隔面板的使用,适合初学者。若是有更深层的见解,请作补充
主要介绍了Java Swing中的工具栏(JToolBar)和分割面版(JSplitPane)组件使用案例,本文直接给出代码实例和效果截图,需要的朋友可以参考下
Java制作的网页浏览器和源代码查看器,仿IE的网页浏览功能,不支持HTML5,窗口采用上下分屏显示的方式,上面显示网页浏览器,下面显示该网页的源代码,JTextField jtfAddress; //输入html文件地址或网址 ...
Java实现文字随意拖动,随处拖动文本字符,移动到任意位置,super("文本的拖动处理"); //调用父类构造函数 String[] data = {"one", "two", "three", "four"}; //字符数组,用于构造列表框 DragList list=new...
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 开发...
2 主窗体的显示,JFRAME 类实现,JSplitPane.HORIZONTAL_SPLIT类将主窗体左右分割 3 JPanel 应用 创建 LEFT 1 2 3,RIGHT 1 2 3来添加左右窗体 4 获取当前日期Calendar类实现 Calendar.Year Calendar.Month ...
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实例代码、JAVA JTABLE实例代码
句法: [h1,h2,hDivider] = uisplitpane(hParent,'propName',propVal,...) 描述: UIPLITPANE 将指定的容器(图形、面板或框架,由句柄 hParent 引用)拆分为由可移动分隔线分隔的两个不同的窗格(面板)。...
* $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...
一个JSplitPane,左边JTree,右边JTable。实现学生管理系统 连接数据库获取数据表
JsplitPane 有一段java应用程序,它的主类名是Abe,那么保存它的源文件名可以是。 abc. java B. Abe. class C. Abe. java D.以上都可以 Java程序设计复习题全文共19页,当前为第2页。Java程序设计复习题全文共19页,...
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 ...
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,scroll1,scroll2); splitPane.setOneTouchExpandable(true); splitPane.setDividerLocation(200); this.getContentPane().add(splitPane,null);}...
java JTree+JTable使用样例,实现将JTree的节点内容显示到JTable中,eclipse导入maven项目 maven编译: mvn clean package
基于Swing的类似编辑器的界面,java培训时的作业。 其中显现了可关闭的选项卡面板、复制文件功能、滚动面板的实现,功能比较简单。但自己觉得可以整理为自己的控件库。
如何使用面板组件 使用JPanel 使用JScrollPane 使用JSplitPane 使用JTabbedPane 使用JIntemalFrame 使用JLayeredPane 使用JRootPane