예제: 주식 시세 표시 응용 프로그램 국제화Flash Player 10.1 이상, Adobe AIR 2.0 이상 Global Stock Ticker 응용 프로그램은 미국, 일본 및 유럽 주식 시장의 주식에 대한 가상 데이터를 검색 및 표시하며 다양한 로캘 규칙에 따라 데이터의 서식을 지정합니다. 이 예제에서는 flash.globalization 패키지의 다음 기능을 보여 줍니다.
이 샘플에 대한 응용 프로그램 파일을 가져오려면 www.adobe.com/go/learn_programmingAS3samples_flash_kr를 참조하십시오. Global Stock Ticker 응용 프로그램 파일은 Samples/GlobalStockTicker 폴더에 있습니다. 이 응용 프로그램은 다음과 같은 파일로 구성됩니다.
사용자 인터페이스 및 샘플 데이터 이해이 응용 프로그램의 기본 사용자 인터페이스 요소는 다음과 같습니다.
이 응용 프로그램은 로캘, 시장 및 회사 주식에 대한 모든 샘플 데이터를StockDataModel 클래스에 저장합니다. 실제 응용 프로그램은 서버에서 데이터를 검색한 후 StockDataModel과 같은 클래스에 저장합니다. 이 예제에서는 모든 데이터가 StockDataModel 클래스에 하드 코딩되어 있습니다. 참고: 재무 차트에 표시되는 데이터는 DataGrid 컨트롤에 표시되는 데이터와 일치하지 않을 수 있습니다. 차트는 다른 회사를 선택할 때마다 임의로 다시 그려집니다. 이는 단지 예시용입니다.
로캘 설정이 응용 프로그램은 일부 초기 설정 작업 후에 Localizer.setLocale() 메서드를 호출하여 기본 로캘에 대한 포맷터 객체를 생성합니다. 또한 setLocale() 메서드는 사용자가 Locale 콤보 상자에서 새 값을 선택할 때마다 호출됩니다. public function setLocale(newLocale:String):void { locale = new LocaleID(newLocale); nf = new NumberFormatter(locale.name); traceError(nf.lastOperationStatus, "NumberFormatter", nf.actualLocaleIDName); cf = new CurrencyFormatter(locale.name); traceError(cf.lastOperationStatus, "CurrencyFormatter", cf.actualLocaleIDName); symbolIsSafe = cf.formattingWithCurrencySymbolIsSafe(currentCurrency); cf.setCurrency(currentCurrency, currentSymbol); cf.fractionalDigits = currentFraction; df = new DateTimeFormatter(locale.name, DateTimeStyle.LONG, DateTimeStyle.SHORT); traceError(df.lastOperationStatus, "DateTimeFormatter", df.actualLocaleIDName); monthNames = df.getMonthNames(DateTimeNameStyle.LONG_ABBREVIATION); } public function traceError(status:String, serviceName:String, localeID:String) :void { if(status != LastOperationStatus.NO_ERROR) { if(status == LastOperationStatus.USING_FALLBACK_WARNING) { trace("Warning - Fallback locale ID used by " + serviceName + ": " + localeID); } else if (status == LastOperationStatus.UNSUPPORTED_ERROR) { trace("Error in " + serviceName + ": " + status); //abort application throw(new Error("Fatal error", 0)); } else { trace("Error in " + serviceName + ": " + status); } } else { trace(serviceName + " created for locale ID: " + localeID); } } setLocale() 메서드는 먼저 LocaleID 객체를 생성합니다. 이 객체를 통해 나중에 필요한 경우 실제 로캘에 대한 세부 사항을 쉽게 얻을 수 있습니다. 그런 다음 이 메서드는 해당 로캘에 대한 새 NumberFormatter, CurrencyFormatter 및 DateTimeFormatter 객체를 생성합니다. 각 포맷터 객체를 생성한 후 traceError() 메서드가 호출됩니다. 이 메서드는 요청된 로캘에 문제가 있는 경우 콘솔에 오류 및 경고 메시지를 표시합니다. 실제 응용 프로그램은 이러한 오류를 추적할 뿐만 아니라 적절히 반응해야 합니다. CurrencyFormatter 객체를 생성한 후 setLocale() 메서드는 포맷터의 통화 ISO 코드, 통화 기호 및 fractionalDigits 속성을 사전 지정된 값으로 설정합니다. 이러한 값은 사용자가 Markets 콤보 상자에서 새 시장을 선택할 때마다 설정됩니다. DateTimeFormatter 객체를 생성한 후 setLocale() 메서드는 지역화된 약식 월 이름의 배열을 가져옵니다. 데이터 서식 지정서식이 지정된 주식 데이터는 DataGrid 컨트롤에 표시됩니다. DataGrid 열은 각각 적절한 포맷터 객체를 사용하여 열 값의 서식을 지정하는 레이블 함수를 호출합니다. 예를 들어 Flash 버전에서는 다음 코드가 DataGrid 열을 설정합니다. var col1:DataGridColumn = new DataGridColumn("ticker"); col1.headerText = "Company"; col1.sortOptions = Array.NUMERIC; col1.width = 200; var col2:DataGridColumn = new DataGridColumn("volume"); col2.headerText = "Volume"; col2.width = 120; col2.cellRenderer = RightAlignedCell; col2.labelFunction = displayVolume; var col3:DataGridColumn = new DataGridColumn("price"); col3.headerText = "Price"; col3.width = 70; col3.cellRenderer = RightAlignedCell; col3.labelFunction = displayPrice; var col4:DataGridColumn = new DataGridColumn("change"); col4.headerText = "Change"; col4.width = 120; col4.cellRenderer = RightAlignedCell; col4.labelFunction = displayPercent; 이 예제의 Flex 버전의 경우 MXML에 DataGrid를 선언합니다. 또한 각 열에 대해 유사한 레이블 함수를 정의합니다. labelFunction 속성은 Localizer 클래스의 서식 지정 메서드를 호출하는 다음 함수를 참조합니다. private function displayVolume(item:Object):String { return localizer.formatNumber(item.volume, 0); } private function displayPercent(item:Object):String { return localizer.formatPercent(item.change ) ; } private function displayPrice(item:Object):String { return localizer.formatCurrency(item.price); } 그런 다음 Localizer 메서드는 적절한 포맷터를 설정 및 호출합니다. public function formatNumber(value:Number, fractionalDigits:int = 2):String { nf.fractionalDigits = fractionalDigits; return nf.formatNumber(value); } public function formatPercent(value:Number, fractionalDigits:int = 2):String { // HACK WARNING: The position of the percent sign, and whether a space belongs // between it and the number, are locale-sensitive decisions. For example, // in Turkish the positive format is %12 and the negative format is -%12. // Like most operating systems, flash.globalization classes do not currently // provide an API for percentage formatting. nf.fractionalDigits = fractionalDigits; return nf.formatNumber(value) + "%"; } public function formatCurrency(value:Number):String { return cf.format(value, symbolIsSafe); } public function formatDate(dateValue:Date):String { return df.format(dateValue); } | |
|