AS3のコンボボックスでクリックしたテキストのフォント名を取得する方法は?

このQ&Aのポイント
  • AS3のコンボボックスでクリックしたテキストのフォント名を取得する方法について質問があります。現在、コンボボックスの選択肢とは別にテキストをクリックするとフォント名を取得する機能を実装していますが、エラーが発生してしまいます。具体的には、エラー内容が「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません」となっています。解決策を教えてください。
  • AS3のコンボボックスでテキストのフォント名を取得する方法について質問です。私は現在、コンボボックスの選択肢とは別にテキストをクリックするとそのテキストのフォント名を取得する機能を作成していますが、エラーが発生してしまいます。具体的には、エラー内容が「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません」となっています。どのように解決すればいいでしょうか?
  • AS3のコンボボックスでクリックしたテキストのフォント名を取得する方法について質問です。コンボボックスの選択肢とは別にテキストをクリックすると、そのテキストのフォント名を取得する機能を作成していますが、エラーが出てしまいます。具体的には、「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません」というエラーです。このエラーの原因と解決方法を教えてください。
回答を見る
  • ベストアンサー

エラーになってしまいます。

コンポーネントのコンボボックスでこのように書きました。 コンボボックスの選択肢とは別にテキストをクリックするとフォント名を取得します。 クリックしたテキストに設定されているフォント名を、コンボボックスのセレクト値に したいのですが、どうすればいいでしょうか? ■エラー内容 TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at test/changeHandler() ■AS3 package { import flash.display.*; import flash.events.*; import flash.text.*; import fl.events.*; import fl.controls.*; import fl.data.DataProvider; public class test extends MovieClip { var comboData:Array = new Array( {label:"フォント1"}, {label:"MS ゴシック"}, {label:"フォント3"} ); var combobox_cb:ComboBox; var combobox_cb:ComboBox; var format:TextFormat; var text:TextField; public function test() { init(); } private function init():void { combobox_cb = new ComboBox(); combobox_cb.dropdownWidth = 200; combobox_cb.width = 200; combobox_cb.move(150, 50); combobox_cb.dataProvider = new DataProvider(comboData); combobox_cb.prompt = 'フォント2'; format = new TextFormat(); format.font = "MS ゴシック" text = new TextField(); text.defaultTextFormat = format; text.text = 'テキスト'; addChild(combobox_cb); addChild(text); text.addEventListener(MouseEvent.CLICK, changeHandler); } private function changeHandler(e:Event):void { trace(e.currentTarget.getTextFormat().font); combobox_cb.selectedItem.label = e.currentTarget.getTextFormat().font;//ここでエラー } } }

  • dcx147
  • お礼率33% (214/636)
  • Flash
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

まず..., 大きく誤解をされているように思うのですが。。。 combobox_cb.selectedItem.label = ○○; ↑これだと(仮にこれが通用したとしても), コンボボックス「combobox_cb」で選択しているアイテムのラベルが「○○」になってしまうだけですよ。 わかりますでしょうか? 他のものに喩えるなら 「バッター(打者)をAからBに変更する」 のではなくて 「バッター(打者)の名前をAからBに変更する」 みたいな感じになるというか。。。 つまり 「選択アイテム自体を切り替える」のではなくて 「選択されたアイテムのラベルを変える」になってしまうということです。 (場合によっては同名のラベルがどんどん増えていくことになる。) そうではなく, 「選択アイテム自体を切り替える」」のでしたら, selectedItem.label ではなく selectedIndex を変える必要があります。   それと..., スクリプト中に次の1行↓がありますよね。 combobox_cb.prompt = 'フォント2'; この prompt を設定した場合 コンボボックスのアイテム 非選択時 には デフォルトでその prompt である「フォント2」の項目が選択されているということになるんです。 selectedIndex で言うところの -1 が選択状態になるということです。 この prompt には label というものがそもそもありません。 label などないのでそれを変えようとしても > TypeError: Error #1009: null のオブジェクト参照… となるのです。   あくまでも私の推測ですが ですから二重に誤解されているような気がします。 というわけで 私の推測を含む↓修正例(★の部分)です。 //--------------------------------------- package { import flash.display.*; import flash.events.*; import flash.text.*; import fl.events.*; import fl.controls.*; import fl.data.DataProvider; public class test extends MovieClip { var comboData:Array = new Array( {label:"フォント1"}, {label:"MS ゴシック"}, {label:"フォント3"} ); var combobox_cb:ComboBox; //★↓重複しているので削除↓★ //var combobox_cb:ComboBox; var format:TextFormat; var text:TextField; public function test () { init (); } private function init ():void { combobox_cb = new ComboBox(); combobox_cb.dropdownWidth = 200; combobox_cb.width = 200; combobox_cb.move (150, 50); combobox_cb.dataProvider = new DataProvider(comboData); combobox_cb.prompt = 'フォント2'; format = new TextFormat(); format.font = "MS ゴシック"; text = new TextField(); text.defaultTextFormat = format; text.text = 'テキスト'; addChild (combobox_cb); addChild (text); text.addEventListener (MouseEvent.CLICK, changeHandler); } private function changeHandler (e:Event):void { trace (e.currentTarget.getTextFormat().font); //★---↓以下変更↓---★ //コンボボックスの各アイテムをループ for (var i:int = 0; i <= combobox_cb.length-1; i++) { //もしラベルとフォント名が同じであれば if (combobox_cb.getItemAt(i).label == e.currentTarget.getTextFormat().font) { //そのアイテムを選択 combobox_cb.selectedIndex = i; //この forループ を抜ける break; } } } } } //---------------------------------------  

関連するQ&A

  • PHPの取得情報をFlashで表示する方法

    flashについて質問です。 time.phpに現在の時間を取得する <?php echo date("Y/m/d"); ?> を書いて保存し、 それをtimeLoad.as(AS 3.0)をドキュメントクラスとするflash上で表示したいのですが、 package{ import flash.display.MovieClip; import flash.text.TextField; import flash.text.Font; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLVariables; public class timeLoad extends Sprite{ private var tf:TextField; public function timeLoad():void{ var myRequest:URLRequest = new URLRequest("time.php"); var myLoader:URLLoader = new URLLoader(); myLoader.load(myRequest); tf = new TextField(); tf.defaultTextFormat = new TextFormat("Helvetica",10,0x000000); tf.x = 0; tf.y = 0; tf.text = myLoader.data; addChild(tf); } } } tfの内容が2011.1.1などになるのが目的です。 swfファイル、swfを埋め込んだhtmlファイル、phpファイルは同じ階層にあります。 php側flash側の訂正点をご指摘いただけると嬉しいです。

    • ベストアンサー
    • Flash
  • ムービークリップ変換について質問です。

    AS3.0でCS5です。 やや略しますがこのような感じでASでダイナミックテキストを表示させています。 package { public class test extends MovieClip { public function test() { var textInput:TextArea = new TextArea(); var textOutput01:TextField = new TextField(); var textOutput02:TextField = new TextField(); var textOutput03:TextField = new TextField(); textOutput01.text = 'あああ'; textOutput02.text = 'いいい'; textOutput03.text = 'ううう'; addChild(textInput); addChild(textOutput01); addChild(textOutput02); addChild(textOutput03); } } } 実現したいことは、 1:ダイナミックテキストをクリックすると文字がテキストエリアに表示 2:ダイナミックテキストの移動(ドラッグ&ドロップ) ステージに配置する場合であれば、 1:ステージにダイナミックテキストを配置 2:ダイナミックテキストをムービークリップに変換 これでいいと思うのですが、ASだけでこのようなことを実現するには どうすればいいのでしょうか? ダイナミックテキストのままでは、クリックもできないのでムービークリップに 変換しなければ無理かと考えております。 ちなみに、テキストエリアに表示された文字を変更すればダイナミックテキストにも 反映されるものにしたいのでダイナミックテキストは外せません^^;

    • ベストアンサー
    • Flash
  • 下記二つのbitmapDataに関するサンプルソースですが、なぜ問題な

    下記二つのbitmapDataに関するサンプルソースですが、なぜ問題なくaddChildされるのでしょうか? 普通に考えると上から下へパブリッシュされていると思っていたのですが、 厳密には違うということでしょうか? ---------------------------------- var txt:TextField = new TextField(); txt.text = 'あああ'; var bitmapdata = new BitmapData(txt.width,txt.height); var bmp:Bitmap = new Bitmap(bitmapdata); bitmapdata.draw(txt); addChild(bmp); ---------------------------------- bitmapdata.draw(txt); の記述位置をaddChild()の下に記述してもエラーが出ること無く実行されます。 しかし、 bitmapdata.draw(txt); の記述がなければエラーが出ませんが、描画されません。 ---------------------------------- var txt:TextField = new TextField(); txt.text = 'あああ'; var bitmapdata = new BitmapData(txt.width,txt.height); var bmp:Bitmap = new Bitmap(bitmapdata); addChild(bmp); bitmapdata.draw(txt); ---------------------------------- 単純にaddChild()した後に、draw()することができるということでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ActionScript3.0でスクロールバー

    お世話になります。 ActionScript3.0とflashの勉強中で、表題のところで詰まってしまいお尋ねしたいことができました。 flash上のダイナミックテキストフィールドにスクロールバーを付けたいのですが、 以下のように記述してもどうしてもコンパイル時にエラーが出てしまいます。 これだけでは定義が不足なのでしょうか…… お力添えいただければ幸いです。 よろしくお願いします。 使用ツール:Adobe flash CS4、FlashDevelop(ActionSctript3.0) ----- import fl.controls.ScrollBarDirection; import fl.controls.UIScrollBar; var myTextField:TextField = new TextField(); myTextField.width = 160; myTextField.height = 120; myTextField.border = true; myTextField.x = 10; myTextField.y = 10; addChild(myTextField); var hScrollBar:UIScrollBar = new UIScrollBar(); hScrollBar.direction = ScrollBarDirection.HORIZONTAL; hScrollBar.scrollTarget = myTextField; hScrollBar.width = myTextField.width; hScrollBar.move(myTextField.x, myTextField.y + myTextField.height); addChild(hScrollBar); var txt:String = "てすと"; myTextField.text = txt; vScrollBar.update(); ----- 発生エラー文 1046: 型が見つからないか、コンパイル時定数ではありません : UIScrollBar

  • AS3.0で複数のButtonコンポーネントを動的に作成する方法

    こんにちは。 FLASH CS3&AS3.0、WIN XPの環境にて、 AS3.0で複数のButtonコンポーネントを動的に作成する方法を勉強中なのですが、var aButton[i]の所で当然ながらエラーが出てしまい、 どの様に記載すればよいのか、戸惑っております。 大変お手数をお掛けしますが、ご教授頂けると幸いです。 どうぞ宜しくお願い致します。 /* ==================================== */ import fl.controls.Button; var btn_names_array:Array = new Array("1", "2", "3", "4", "5") btn_max = length.btn_names_array; for(i=1;i<btn_max;i++){ var aButton[i]:Button = new Button(); addChild(aButton[i]); aButton[i].label = btn_names_array[i]; aButton[i].toggle = true; aButton[i].emphasized = true; aButton[i].move(10, 10+30); var format[i]:TextFormat = new TextFormat(); format[i].size = 15; aButton[i].setStyle("textFormat", format[i]); aButton[i].addEventListener(MouseEvent.CLICK, clickHandler[i]); function clickHandler[i](event:MouseEvent):void { trace("Event type "+[i]+":" + event.type); } }

    • ベストアンサー
    • Flash
  • Flashplayer7では表示されないTextField(Flash9なら大丈夫)

    こんにちは。 AIR SDK(FLEX SDK)を使って、 スクリプトを書き、 swfファイルを作りました。 しかし、はじめ、FlashPlayer7で 再生したところ、textfield.textで 設定した文字が表示されませんでした (IEプラグイン経由なら、 表示されました。)。 そこで、FlashPlayer9で再生したところ、 FlashPlayer9では、再生できました。 この2つで、何か違いが あるのでしょうか。 (HTMLで表示する場合は、 問題ありません。Player単独で 再生する場合です)。 何か分かる人がいましたら、 よろしくお願いします。 最後に、スクリプトを、 載せておきます。 package{  import flash.display.*;  import flash.text.*;   public class HelloWorld extends Sprite{ public function HelloWorld(){ var textfield:TextField=new TextField(); textfield.text="Hello!!"; textfield.autoSize=TextFieldAutoSize.LEFT; addChild(textfield); } } } これが、 Flash7ではだめで、9では動きます。 よろしくお願いします。

  • ActionScript3.0のfor文の処理について質問させてくださ

    ActionScript3.0のfor文の処理について質問させてください。 画面に9つのTextFieldを作って、テキストを表示させています。 そして、ステージをクリックしたら、そのテキストが消えるという流れにしたいのです。 どうすればできるのでしょうか? あれよこれよと色々試して書いたスクリプトが var b:int = 0; for(b; b<10; ++b) { var introA:TextField = new TextField(); var introB:TextField = new TextField(); introA.name = "introA"+b; introB.name = "introB"+b; addChild(introA); addChild(introB); introA.htmlText = "aaa"+b; introB.text = "bbb"+b; introA.x= 30; introB.x= 130; introA.y= 30*b; introB.y= 30*b; } stage.addEventListener(MouseEvent.CLICK, cont); function cont(ev:MouseEvent):void{ introA.htmlText = ""; introB.text = ""; } -------- これだと、最後のひとつしか消えてくれません。 どうすれば全部のテキストが消えるのか、どなたかご指導よろしくお願いします。

    • ベストアンサー
    • Flash
  • AS3の拡大と縮小について

    下記の外部ASで試しているのですが比率を維持して拡大されます。 予想では横は100%で縦に300%伸びて表示されるはずなのですがなぜ比率が 維持されるのでしょうか? また、縦だけとこ横だけ拡大や縮小するにはどう書けばいいのでしょうか? package { import flash.display.*; import flash.events.*; import flash.text.*; public class Main extends MovieClip { private var mc:MovieClip; private var text:TextField; public function Main():void { mc = new MovieClip(); addChild(mc); text = new TextField(); text.text = "テスト"; text.scaleX = 1; text.scaleY = 3; mc.addChild(text); } } }

    • ベストアンサー
    • Flash
  • クリックするたびにテキストを1個ずつ表示させる

    マウスクリックをしてテキストを1個ずつ表示させたいです。 stage.addEventListener(MouseEvent.CLICK, mc); function mc(event:MouseEvent):void{ var text1 : TextField = new TextField(); text1.text = "Hello World"; this.addChild(text1); } を実行すると、クリックするたびテキストが1つずつ増えていきます。 これを前回のを消去して新たに表示というような形で1つずつ表示させることはできないでしょうか?

    • ベストアンサー
    • Flash
  • java アプレット

    学校の授業でアプレットを学んでいます。 しかし・・・ 下のプログラムで、計算した結果をlabel3にはりつけたいのですが、計算結果がでてくれません・・・ボタンを押しても何もでてきません。 コマンドプロンプトで、エラーはでてきません。 お手数ですが、誰かどこがいけないのか教えて下さい。 import java.awt.*; import java.awt.event.*; public class B extends java.applet.Applet implements ActionListener { Label label3 = new Label(); Button button2 = new Button(); TextField textfield1= new TextField(10); TextField textfield2= new TextField(10); public void init() { button2.setLabel("入力したらクリック!"); button2.setBounds(new Rectangle(50, 465, 120, 20)); this.setLayout(null); label3.setBackground(Color.blue); label3.setBounds(new Rectangle(325, 80, 200, 35)); textfield1.setBounds(100, 425, 100, 25); textfield2.setBounds(150, 350, 100, 25); this.add(textfield2, null); this.add(label3, null); this.add(textfield1, null); this.add(button2, null);} public void actionPerformed(ActionEvent event) {if(event.getSource() == button2) {int diff = Integer.parseInt(textfield1.getText()) - Integer.parseInt(textfield2.getText()); String otsuri; otsuri ="お釣りは"+ diff +"円です。"; label3.setText(otsuri);} }} よろしくお願いします。

    • ベストアンサー
    • Java