`
hello_player
  • 浏览: 153669 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Flex 4 实现自定义 fieldset 功能

    博客分类:
  • Flex
阅读更多

好久没有写点东西了,最近接到 Flex4 研发任务,flex 自带组件功能比较弱,都要自己扩展,不像 ext ,都是定义好的组件,90% 以上需要用到的组件都不需要自己动手,直接可以使用,但这样也有个好处,把发挥的空间留给研发和美工,现成的东西再好看多了也会有审美疲劳的,而且千遍一律,未必是好现象,也不利于自身的提高,我想这也是一部分人宁愿用类似 jquery 之类的轻量级的框架也不用 ext 的原因,当然也有加载速度等原因。

不扯了,写了个类似 fieldset 的小东西,希望可以给需要的一点帮助。

package test
{
	import flash.geom.Point;
	
	import mx.core.IVisualElement;
	
	import spark.components.Label;
	import spark.components.VGroup;
	
	public class MyVGroup extends VGroup
	{
		public function MyVGroup()
		{
			super();
		}
		
		private var vgtitle:Label;		// 标题控件
		private var _title:String;		// 设置标题变量
		private var _pad:int;			// 设置自定义容器中添加的子控件与边框的距离,上边距*2
		private var _pos:int;			// 设置标题相对容器的 x 坐标
		
		override protected function createChildren():void {
			super.createChildren();
			
			if (!vgtitle) {
				vgtitle = new Label();
				vgtitle.text = title;
				
				addElement(vgtitle);
			}
		}
		
		override protected function measure():void {
			super.measure();
			
			pad = pad <= 0 ? 10 : pad;
			// 增加容器的大小
			measuredWidth += pad * 2;
			measuredHeight += pad;
			
			// 设置子控件距离边框的距离
			paddingLeft = pad;
			paddingTop = pad * 2;
			paddingRight = pad;
			paddingBottom = pad;
		}
		
		override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
			// 清除自定义边框重画
			graphics.clear();
			super.updateDisplayList(unscaledWidth, unscaledHeight);
			
			// 移动标题至目标位置
			pos = pos <= 0 ? 18 : pos;
			vgtitle.move(pos, 0);
			
			//根据标题位置画出边框位置
			graphics.lineStyle(1, 0x000000, 1.0);
			graphics.moveTo(vgtitle.x - 2, vgtitle.height/2);
			graphics.lineTo(0, vgtitle.height/2);
			graphics.lineTo(0, unscaledHeight);
			graphics.lineTo(unscaledWidth, unscaledHeight);
			graphics.lineTo(unscaledWidth, vgtitle.height/2);
			graphics.lineTo(vgtitle.x + vgtitle.width + 2, vgtitle.height/2);
			
		}
		
		public function get title():String {
			return _title;
		}
		
		public function set title(value:String):void {
			_title = value;
		}
		
		public function get pad():int {
			return _pad;
		}
		
		public function set pad(value:int):void {
			_pad = value;
		}
		
		public function get pos():int {
			return _pos;
		}
		
		public function set pos(value:int):void {
			_pos = value;
		}
	}
}

 调用如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" 
			   xmlns:customgroup="test.*">
	<s:layout>
		<s:HorizontalLayout horizontalAlign="center" verticalAlign="middle"/>
	</s:layout>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	
	<s:VGroup>
		<customgroup:MyVGroup title="文化程度">
			<s:HGroup>
				<s:CheckBox label="高中"/>
				<s:CheckBox label="初中"/>
			</s:HGroup>
			<s:HGroup>
				<s:CheckBox label="本科"/>
				<s:CheckBox label="大专"/>
			</s:HGroup>
			<s:HGroup>
				<s:CheckBox label="硕士"/>
				<s:CheckBox label="博士"/>
			</s:HGroup>
		</customgroup:MyVGroup>
	</s:VGroup>
</s:Application>

 最后看看结果,大家觉得有什么要改进的可以一起讨论讨论:

  • 大小: 10.2 KB
分享到:
评论
2 楼 hello_player 2011-01-27  
,谢谢,可惜最近又没空去深入研究了,烦人的事情总是那么多。哎!
1 楼 damoqiongqiu 2011-01-07  
很好很强大,学习一下。

相关推荐

    Flex3自定义组件类似于Fieldset

    Flex3自定义组件类似于Fieldset

    form相关操作

    - 自定义清空逻辑:可以通过JavaScript遍历表单元素并清空其值,实现自定义的清空功能。 7. **表单序列化与反序列化** - 序列化:`FormData`对象可以用来序列化表单数据,方便通过AJAX发送。 - 反序列化:在...

    H5表单美化

    1. 使用Flexbox或Grid布局:CSS3的`display: flex`和`display: grid`可以方便地实现复杂布局,让表单元素在不同屏幕尺寸下都能保持良好的对齐和间距。 2. 响应式设计:通过媒体查询(`@media`),我们可以根据设备的...

    html+css高仿B站的注册页面

    - **按钮样式**:自定义按钮的背景色、边框、圆角和文字颜色,可以使用`:hover`、`:active`伪类来改变鼠标悬停和点击状态下的样式。 - **表单元素**:通过CSS控制输入框的边框、圆角、占位符颜色等,使其与B站的...

    signup-form:仅使用HTML和CSS制作的简单注册表单

    5. **自定义表单元素**:通过CSS的`appearance`属性,可以消除浏览器默认的样式,实现自定义的输入框、按钮等外观。 6. **浮动和清除**:在传统的CSS布局中,`float`属性用于创建多列布局,而`clear`属性用于清除...

    projeto-html-css3

    6. **动画和过渡**:`transition`属性实现元素状态间的平滑过渡,`animation`属性允许自定义动画效果,如关键帧`@keyframes`。 7. **文字和字体**:CSS3支持更多的文字阴影、文本溢出处理、定制字体(@font-face)...

    CSS基础标签.md

    - **Flexbox方法**:将父容器的 `display` 属性设置为 `flex`,然后使用 `align-items: center;` 或 `justify-content: center;` 实现垂直或水平居中。 - **Grid方法**:设置 `display: grid;` 并使用 `align-...

    survey-form:FCC调查表项目

    你可以使用媒体查询(`@media`)和弹性盒子模型(`display: flex`)实现这一目标。 6. **实时工作版本** 提供的实时工作链接意味着项目还可能涉及到JavaScript和CSS,用于处理用户交互和美化样式。JavaScript可以用来...

    网页

    通过使用媒体查询(`@media`)和弹性盒模型(`display: flex`或`grid`),可以实现自适应内容排列。 6. **框架和布局**:HTML5引入了新的标签如`&lt;header&gt;`、`&lt;nav&gt;`、`&lt;main&gt;`、`&lt;article&gt;`和`&lt;footer&gt;`,帮助构建...

    Survey-Form:使用 HTML 和 CSS 的调查表

    4. 输入字段样式:自定义边框、背景色、占位符颜色等,使表单更具品牌风格。 5. 错误提示:用CSS创建样式化的错误信息,指导用户修正输入。 总的来说,"Survey-Form"项目是一个学习和实践HTML和CSS的实用示例,涵盖...

Global site tag (gtag.js) - Google Analytics