データグリッドでアイテムエディターを使用すると、TABキーを押下したときに次のコントロールに遷移してくれます。
しかし、アイテムレンダラーを使用すると、TABキーを押下しても次のコントロールに遷移してくれません。
どうすれば実現できるかを調べたところ、単純なアイテムレンダラーであれば、アイテムエディターのようにTABキーを押下したときに次のコントロールに遷移させる方法は、簡単なプロパティの設定だけで実現できることがわかりました。
以下、その方法を簡単にご紹介します。
①データグリッドコントロールの editable プロパティを trueにします。
<mx:DataGrid editable="true">
※このプロパティを true に設定すると、データグリッド内の各列に アイテムエディターが作成されるので、不要な列は DataGridColumnの editable プロパティを false に設定します。
②アイテムエディターのインスタンスが必須ですので、アイテムレンダラーとアイテムエディターが同じ場合は、DataGridColumnの rendererIsEditor プロパティを false に設定します。
<mx:DataGridColumn headerText="列2" dataField="name" rendererIsEditor="true" itemRenderer="mx.controls.TextInput"/>
簡単なサンプルを下記に示します。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*"> <mx:Script> <![CDATA[ [Bindable] private var dgData:Array = [ {no:1, name:'氏名1', age:21, address:'住所1'}, {no:2, name:'氏名2', age:22, address:'住所2'}, {no:3, name:'氏名3', age:23, address:'住所3'}, {no:4, name:'氏名4', age:24, address:'住所4'}, {no:5, name:'氏名5', age:25, address:'住所5'} ]; ]]> </mx:Script> <mx:DataGrid dataProvider="{dgData}" editable="true"> <mx:columns> <mx:DataGridColumn headerText="列1" dataField="no" editable="false"/> <mx:DataGridColumn headerText="列2" dataField="name" rendererIsEditor="true" itemRenderer="mx.controls.TextInput"/> <mx:DataGridColumn headerText="列3" dataField="address" rendererIsEditor="true" itemRenderer="mx.controls.TextInput"/> </mx:columns> </mx:DataGrid> </mx:Application>
単純な アイテムレンダラー(コンテナが無いコンポーネント)であれば、これだけです。一見したら何もしていないようにも見えます(^^;)
この方法は、FXUGのフォーラム(⇒ここ)で見つけました。
しかし、コンテナがあるアイテムレンダラー(1つのアイテムレンダラー内に複数のコンポーネントがある)のように、まずアイテムレンダラー内だけでフォーカス遷移し、最後のコンポーネントでTABキーを押下されたときに、次のアイテムレンダラーに移るといったような複雑なことを実現するには、少々アイテムレンダラーに使用するコンポーネントをカスタマイズする必要があります。
それについては、次回ご紹介します。