package com.XXX.utils
{
import flash.events.Event;
import flash.events.FocusEvent;
import flash.text.TextLineMetrics;
import mx.containers.HBox;
import mx.controls.Button;
import mx.controls.Label;
import mx.controls.NumericStepper;
import mx.controls.TextInput;
import mx.core.UITextField;
import mx.core.mx_internal;
import mx.events.FlexEvent;
import mx.formatters.DateFormatter;
import mx.managers.IFocusManager;
use namespace mx_internal;
/**
* Dispatched when the time changes, which could be either the hour, minute, or dayPart.
*/
[Event(name="change",type="flash.events.Event")]
/**
* Dispatched when the hour changes.
*/
[Event(name="hoursChange",type="flash.events.Event")]
public class NumberFormaterStepr extends NumericStepper
{
public function NumberFormaterStepr()
{
super();
this.addEventListener(FlexEvent.VALUE_COMMIT,valueCommandHandler);
}
/** * @private */
protected var TextInputField:TextInput; //重新做一个input框,遮盖原来的
/** * @private */ protected var _newvalue:Number = 0; //新的属性,用于存值
/** * @private */ private var _enabled:Boolean=true; //是否启用
override protected function createChildren():void//重写创建子对象方法
{
super.createChildren();
var widestNumber:Number=61;
var lineMetrics:TextLineMetrics = measureText(widestNumber.toString());
var textWidth:Number = lineMetrics.width + UITextField.TEXT_WIDTH_PADDING+4;
if (!TextInputField)
{
TextInputField = new TextInput();
TextInputField.tabEnabled=true;
TextInputField.focusEnabled = true;
TextInputField.styleName = this;
TextInputField.width=textWidth;
TextInputField.restrict="0-9";
TextInputField.text = formatNumberWithChar(_newvalue);
TextInputField.parentDrawsFocus = true;
TextInputField.setStyle("textAlign","right");
TextInputField.setStyle("borderStyle","solid");
TextInputField.setStyle("paddingLeft",0);
TextInputField.setStyle("paddingRight",0);
TextInputField.setStyle("paddingTop",0);
TextInputField.setStyle("paddingBottom",0);
TextInputField.setStyle("horizontalGap",0);
TextInputField.setStyle("borderThickness",0.5);
TextInputField.setStyle("borderColor","#cccccc");
TextInputField.addEventListener(FocusEvent.FOCUS_OUT, inputField_focusOutHandler);
this.addChild(TextInputField);
}
inputField=TextInputField;
}
/** * @private * * do for format number to string */
private function valueCommandHandler(event:FlexEvent):void{
//var v=this.value;
inputField.text=formatNumberWithChar(value);
if(inputField==TextInputField){
this.newvalue=value;
}
}
/** * @private * Remove the focus from the text field. */
override protected function focusInHandler(event:FocusEvent):void {
super.focusInHandler(event);
var fm:IFocusManager = focusManager; if (fm) fm.defaultButtonEnabled = false;
}
[Bindable]
/** * The hours (an integer from 0 to 23) of the day. * * @default 0 */
public function get newvalue():Number { return _newvalue; }
[Inspectable(defaultValue=0,category="General",name="Hours")]
public function set newvalue(val:Number):void {
_newvalue = val;
this.invalidateProperties();
//dispatchEvent(new Event("hoursChange"));
// dispatchEvent(new Event("change"));
}
override protected function commitProperties():void
{
super.commitProperties();
TextInputField.text = formatNumberWithChar(_newvalue);
}
/** * @private */
override public function set enabled(value:Boolean):void {
_enabled = value;
if(TextInputField){
TextInputField.enabled=value;
nextButton.enabled=value;
prevButton.enabled=value;
}
}
/** * @private */
override public function get enabled():Boolean {
return _enabled;
}
//把数字转换成字符的。
public function formatNumberWithChar(value:Number):String
{
var len:Number=2;
var str:String=new String(value);//转换成String
var arr:Array=super.stepSize.toString().split("\\.");
if(arr.length>1){
len= arr[1].toString().length;
}
str=value.toFixed(len);
return str;
}
/** * @private * Place the buttons to the right of the text field. */
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
var w:Number = nextButton.getExplicitOrMeasuredWidth();
var h:Number = Math.round(unscaledHeight / 2);
var h2:Number = unscaledHeight - h;
nextButton.x = unscaledWidth - w;
nextButton.y= 0;
nextButton.setActualSize(w, h2);
prevButton.x = unscaledWidth - w;
prevButton.y = unscaledHeight - h;
prevButton.setActualSize(w, h);
}
/** * @private */
private function inputField_focusOutHandler(event:FocusEvent):void {
inputField.text=formatNumberWithChar(Number(TextInputField.text));
if(inputField==TextInputField){
this.newvalue=value;
}
focusOutHandler(event);
// Send out a new FocusEvent because the TextInput eats the event
// Make sure that it does not bubble
dispatchEvent(new FocusEvent(event.type, false, false, event.relatedObject, event.shiftKey,event.keyCode));
}
}
}
当你输入9的时候,你的stepsize 设置的0.01,那么就会显示9.00,当你输入9.236的时候,四舍五入为9.24.
分享到:
相关推荐
Flex 3 Flex 2 技巧 Flex编译器支持条件编译 ...精通Flex 3.0――4.7 ActionScript 3.0网络编程 精通Flex 3.0――4.7.1 加载服务端数据 精通Flex 3.0――4.7.2 基于Socket的连接 精通Flex 3.0――4.8 使用事件处理类
这个"完全自学flex3.0随书源码"的资源包含了学习Flex 3.0过程中可能需要的所有源代码示例,对于初学者来说是极有价值的参考资料。 1. **Flex SDK与Flex Builder** Flex SDK是免费的开发工具,包含编译器、库和...
《FLASH-FLEX3.0开发教程中文版(例子源码)》是一份全面介绍Adobe Flex 3.0技术的教程,特别适合初学者和有一定基础的开发者深入学习。Flex是基于ActionScript 3.0的开放源代码框架,主要用于构建富互联网应用程序...
Flex 3.0 学习指南是一份专为想要深入理解和掌握Adobe Flex 3.0技术的初学者或开发者设计的教程。Flex是基于ActionScript 3.0和Flash Player的开源框架,用于构建富互联网应用程序(RIA)。这份指南旨在帮助你从零...
Flex 3.0的中英文资料集合为学习者提供了丰富的学习资源,无论是初学者还是有经验的开发者,都能从中受益。 "2008522103704.chm"可能是一个帮助文档,常见于Windows系统中,用于存储和查看信息。这类文件通常包含...
这个"Flex3.0中文帮助[pdf]"文档是一个面向中国开发者的重要资源,提供了全面的Flex 3.0和ActionScript 3.0的教程、参考和指南。 ActionScript 3.0是Flash Player和Adobe AIR运行时环境中的编程语言,相比早期版本...
《精通Flex3.0:LCDS与ActionScript事件详解》 Flex 3.0是Adobe公司推出的基于Flash Player运行时的开发框架,主要用于构建富互联网应用程序(RIA)。它提供了强大的组件库、数据集成以及丰富的用户体验设计,使得...
Flex3.0学习版快速入门提高版,简单轻松,操作容易。学习简单,很清楚地描述了怎么从零凯斯学习Flex的开发。
10. **源码分析**:压缩包中的"源码"文件可能包含了一些示例项目或代码片段,通过研究这些源码,可以深入了解Flex 3.0的编程实践,包括如何组织项目结构、调用API、实现特定功能等。 总的来说,通过深入学习和实践...
在Flex 3.0教程中,这个文件可能与教学中的某些实践操作或示例应用有关,用于演示如何在Flex应用中集成和使用这些Windows控件。 "安装软件"可能是指用于安装Flex SDK或Flex Builder的程序,这两个是开发Flex应用...
ArcGIS Viewer for Flex 3.0支持多种数据格式和服务的接入,如WMS、WFS等,还支持ArcGIS Server发布的动态和静态地图服务。通过源码,开发者可以了解如何实现数据服务的连接、订阅和数据的动态更新。 7. **自定义...
本资源包中的六个可执行文件(01.exe至06.exe)可能是Flex 3.0开发环境或相关工具的安装程序,用于在用户的计算机上部署Flex开发环境。 Flex 3.0 知识点详解: 1. **ActionScript 3.0**:Flex 3.0 引入了...
1. **Flex SDK**:Flex 3.0 包含了Flex编译器和Flex框架库,开发者可以使用SDK中的MXML和ActionScript来构建用户界面。它支持CSS样式表,使得UI设计更加灵活和可定制化。 2. **MXML**:MXML是一种标记语言,类似于...
本文将深入探讨Flex 3.0的新特性及其在实际开发中的应用。 1. **Spark组件架构**:Flex 3.0引入了全新的Spark组件架构,这是对原有的MX组件的重大改进。Spark组件更加轻量级,性能更优,同时提供了更好的自定义和...
《FLASH-FLEX3.0开发中文版+完整版》是一个专为开发者提供的全面教程,它涵盖了Adobe Flex 3.0的各个重要方面,包括基础知识、组件使用、数据交互以及高级特性。Flex是Adobe公司推出的一款用于创建富互联网应用程序...
在Flex3.0中,通过使用CSS(层叠样式表)可以对用户界面进行详细的定制和美化,使得应用程序的外观与品牌风格保持一致,同时提高用户体验。 一、Flex3.0中的CSS基础 在Flex3.0中,CSS被用来定义组件的外观和布局,...
在Flex 3.0中,开发者可以利用MXML(Markup for XML)和ActionScript来构建用户界面,MXML是一种声明式语言,用于描述界面布局和组件,而ActionScript则提供了面向对象的编程能力。通过这两种语言的结合,开发者能够...
由于上传限制在15M,所以只有打包成四个……资源来自网络,仅供学习参考。 //[完全手册Flex3.0RIA开发.part2/4.rar
在深入理解Flex 3.0的过程中,代码实践至关重要,因为它能够帮助开发者直观地掌握各种组件、服务调用以及事件处理机制。 首先,我们来了解Flex 3.0的核心概念。ActionScript 3.0是Flex的基础,它是基于ECMAScript的...