2012-02-11 9 views
0

mxmlファイルからActionScript DataGridコンポーネントを使用しようとしています。 しかし、それは私にいくつかのエラーを示しています。パッケージをネストできません - as3

私の主なアプリケーションファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:local="*" xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"> 



    <mx:Metadata> 
     [Event(name="myEvent", type="flash.events.Event")] 
    </mx:Metadata> 


    <mx:Button label="Button"/> 
    <mx:Array id="arr"> 
      <mx:Object From="Phill" Subject="GMC-1 Release" Date="12/08/06" CC="Jim" Profit="69" /> 
      <mx:Object From="Harry" Subject="GMC-1 Release" Date="12/08/06 11111111" CC="Ram" Profit="10" /> 
      <mx:Object From="Barb" Subject="GMC-1 Release" Date="12/08/06" CC="Anant" Profit="20" /> 
      <mx:Object From="Amit" Subject="GMC-1 Release" Date="12/07/06" CC="Jim" Profit="28" /> 
      <mx:Object From="Sam" Subject="GMC-1 Release" Date="12/08/06" CC="Jim" Profit="17" /> 
      <mx:Object From="Phill" Subject="GMC-2 Release" Date="12/11/06" CC="Jim" Profit="10" /> 
      <mx:Object From="John" Subject="Grid scrolling" Date="12/10/06" CC="Craig" Profit="20" /> 
      <mx:Object From="Bob" Subject="ItemRenderers" Date="12/10/06" CC="Moxie" Profit="11" />    
</mx:Array> 

<local:AutoResizableADG id="adg" dataProvider="{arr}" width="400" height="400" > 
    <local:columns> 
     <mx:AdvancedDataGridColumn headerText="From" dataField="From" width="50" /> 
     <mx:AdvancedDataGridColumn headerText="Subject" dataField="Subject" width="50" /> 
     <mx:AdvancedDataGridColumn headerText="Date" dataField="Date" width="70" /> 
     <mx:AdvancedDataGridColumn headerText="CC" dataField="CC" /> 
    </local:columns> 

</local:AutoResizableADG> 

</mx:Application> 

AutoResizableADG.asファイルは、同じパッケージに..ですつまりはsrc /(デフォルト・パッケージ)それは私のActionScriptファイル内のエラーを示している

// ActionScript file 

package  // Line where it is showing error. 
{ 

    import flash.display.DisplayObject; 
    import flash.events.MouseEvent; 
    import flash.text.TextLineMetrics; 

    import mx.controls.AdvancedDataGrid; 
    import mx.controls.Alert; 
    import mx.controls.listClasses.IDropInListItemRenderer; 
    import mx.core.IUIComponent; 
    import mx.core.UIComponent; 

    public class AutoResizableADG extends AdvancedDataGrid 
    { 
     var sepArray:Array = new Array(); 
     public function AutoResizableADG() 
     { 
      // call super 
      super(); 
     } 

     /** 
     * Returns the header separators between column headers, 
     * and populates the <code>separators</code> Array with the separators returned. 
     * 
     * @param i The number of separators to return. 
     * 
     * @param seperators Array to be populated with the header objects. 
     * 
     * @param headerLines The parent component of the header separators. 
     * Flex calls the <code>headerLines.getChild()</code> method internally to return the separators. 
     */ 
     override protected function getSeparator(i:int, seperators:Array, headerLines:UIComponent):UIComponent 
     { 

      var sep:UIComponent = super.getSeparator(i, seperators, headerLines); 
      sep.doubleClickEnabled = true; 
      // Add listener for Double Click 
      DisplayObject(sep).addEventListener(myEvent.myEvent, hello); 
      //   Alert.show(""+sep); 
      sepArray.push(sep); 
      return sep; 
     } 

     public function getListItems():Array{ 
      return listItems; 
     } 

     /** 
     * @private 
     * Indicates where the right side of a resized column appears. 
     */ 
     public function hello(event:UIComponent):void 
     { 
      // check if the ADG is enabled and the columns are resizable 
      if (!enabled || !resizableColumns) 
       return; 

      var target:DisplayObject = DisplayObject(event); 
      var index:int = target.parent.getChildIndex(target); 
      // get the columns array 
      var optimumColumns:Array = getOptimumColumns(); 

      // check for resizable column 
      if (!optimumColumns[index].resizable) 
       return; 

      // calculate the maxWidth - we can optimize this calculation 
      if(listItems) 
      { 
       var len:int = listItems.length; 
       var maxWidth:int = 0; 
       for(var i:int=0;i<len;i++) 
       { 
        if(listItems[i][index] is IDropInListItemRenderer) 
        { 
         var lineMetrics:TextLineMetrics = measureText(IDropInListItemRenderer(listItems[i][index]).listData.label); 
         if(lineMetrics.width > maxWidth) 
          maxWidth = lineMetrics.width ; 
        } 
       } 
      } 

      // set the column's width 
      optimumColumns[index].width = maxWidth + getStyle("paddingLeft") + getStyle("paddingRight") + 8; 
     } 
    } 
} 

....

"Packages cannot be nested" 

どうしてですか?何が問題ですか ?

+0

あなたのコードは正しいようです - 私はそれを私のエディタにコピー&ペーストしましたが、 "パッケージはネストできません"というエラーは表示されませんでした。それはあなたのフォルダ構造に関連している可能性があります(名前のないパッケージはいつも一番上のソースフォルダです)?スーパークラスはどうですか?どのIDEを使用していますか? Flash BuilderやFDTの場合は、 'Project-> Clean'を試してみてください。 – weltraumpirat

+0

私は自分のコードだけを使って新しいプロジェクトをセットアップしました。私は、 'myEvent'が未定義のプロパティであると言って、AutoResizableADGクラスのコンパイルエラーが発生しました。これは問題ですか?私が持っている唯一のコードは、あなたのクラスと上記のアプリケーションコードです。これらはすべてデフォルトパッケージに入っています。 – Jeremy

答えて

0

私はなぜそれがコンパイルされていないのかわかりませんが、実際のパッケージにAutoResizableADG.asを入れて試してみましたか?

など。

// ActionScript file 

package myPackage 
{ 
import flash.display.DisplayObject; 
import flash.events.MouseEvent; 
import flash.text.TextLineMetrics; 

import mx.controls.AdvancedDataGrid; 
import mx.controls.Alert; 
import mx.controls.listClasses.IDropInListItemRenderer; 
import mx.core.IUIComponent; 
import mx.core.UIComponent; 

public class AutoResizableADG extends AdvancedDataGrid 
{ 
    .... 
0

私は風変わりだが、文書化された動作です。

  1. weltraumpirat'sの2つの修正が見つかりました。コードを掃除してみてください。
  2. flashdevelopの場合は、myPackgeリファレンスを削除して プロジェクトを再度テストし、次のエラーが表示されたら の変更を元に戻し、それを受け入れます。

どちらの方法も同じ原理で動作します。
幸運!

関連する問題