• ベストアンサー

imageにリスナーを付けたい

 JAVA初心者です、宜しくお願いします。  ある画像をクリックするとその画像の大きいサイズが別画面で表示されますが、色々と調べ てみましたが、imageにアクションリスナーとかをaddしょうとするとエラーが発生します。 (imageにはアクションリスナーをaddできるメソッドが見当たらなかったようでした)  皆さんはそのようなプログラムを書く場合にはどのようにして、イベントを発生させているので しょうか。  宜しくお願いします。

  • Java
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
noname#177743
noname#177743
回答No.1

Imageはコンポーネントではありません。Imageをそのままウインドウにaddして利用することはできませんね? GUI部品ではないのですから、GUIのイベントも組み込めません。 Imageを使うとき、たいていは何かのコンポーネント内でそのImageを描画するなどしているはずです。ということは、イベントを組み込むべきはそのコンポーネントです。例えば、JPanelのpaintComponentメソッドを使ってImageを描画している、というのならば、そのJPanelにイベントリスナーを組み込みます。そして、例えばクリックイベントならば、クリックした地点がImageの領域内かどうかをチェックし、その中にあれば必要な処理を実行する、というようにすればよいでしょう。

eiji_0035
質問者

お礼

 chiiba_kunさん、回答ありがとうございます。  やはりそうことですか、Imageの座標とかをパラメータとしてやるしかないのですね。  サンマイクロシステムズ(今は違うかも)ももう少し知恵を出してくれればと思うことが 多いです。  座標値以外にも良いやり方があれば是非教えてください。

関連するQ&A

  • イベントリスナのコールバックメソッドは何故一つ?

    Android(JAVA)のイベントリスナについて教えてください >イベントリスナは、ひとつのコールバックメソッドを持つ View クラスのインターフェイスです。それらのメソッドは、リスナが登録されたビューでユーザがUI のアイテムにアクションを起こしたことがトリガとなり Android フレームワークにより呼び出されます ▽6.5 UIイベントハンドリング - ソフトウェア技術ドキュメントを勝手に翻訳   https://sites.google.com/a/techdoctranslator.com/jp/android/guide/ui/ui-events ・なぜ、コールバックメソッドをひとつしか持たないのでしょうか? ・複数持ってはいけないのでしょうか? ・インターフェイスだから? ・言語機能として複数保持出来ないことはないけれども、イベントリスナ的に分かりやすくするため(?)、敢えて機能毎に分けているのでしょうか? ■質問背景 ・ドキュメント見てたらそうなってたので、なんでかな? と思い質問しました ・複数インターフェイスにそれぞれ唯一の抽象メソッドを持たせず、1つのインターフェイスに複数の抽象メソッドを持たせたほうが分かりやすいような気もするのですが… 「View.AllListener」に「onClick()」「onLongClick()」みたいなのは何故ダメなのでしょうか?

    • ベストアンサー
    • Java
  • アクションリスナー(初心者です)

    JAVAでボタンが押されたらすでに描かれている線に さらに線が加わって描かれるというプログラムを作ろうとしているのですが、アクションリスナーを受け取ったメソッドの中身をどうしたらいいのか行き詰まりました・・・作りかけのプログラムを載せてみますので アドバイスいただければと思います よろしくお願いします import java.applet.Applet; import java.awt.Graphics.*; import java.awt.event.*; import java.awt.*; public class file928 extends Applet implements ActionListener { Button botan; public void init() { botan=new Button("選択"); add(botan); botan.addActionListener(this); } public void paint(Graphics g) { g.drawString("L.A.Airport",100,300);           ~中略~ g.drawLine(405,420,655,240); } public void actionPerformed(ActionEvent x) { ーここをどうしたらいいかわかりません・・・ー } }

    • ベストアンサー
    • Java
  • イベントとリスナーに関すること

     Javaの初心者です。AWTについてご質問します。 処理をしたい手順として (1) したい処理の手順の選択(Aの処理か、Bの処理か、のように)をRadio Button で選択し (2) データの入力(Aの処理に対するデータ、Bの処理に対するデータ、の入力)を行い (3) それぞれの処理の実行と結果の表示、これをButton で促す。 の手順でプログラムを行いたいのです。((1)と(2)を逆にすれば実行できることは確認しましたが、何とか自然な形でということで上記の手順で行いたいのです。)  私の作ったプログラムではリスナーの中から内部クラスで定義された別のリスナーを呼び出すという形になってしまいます。これではだめらしいのです。呼び出し側で、その内部クラスの生成を行った後、実行のためのメソッドにはenableを使ってしまいました。どのメソッドを添えたらよいのかわからなくて苦し紛れに使いました。 内部クラスの初期設定の部分までは実行されているのですが、イベントハンドラであるactionPerformedの中で書かれた命令は実行されていません。 AWTに堪能な方、お時間を煩わせて申し訳ありませんが、お教えくださいますようお願い申し上げます。

    • ベストアンサー
    • Java
  • Label を リスナーと結びつける方法

    フレーム上に (ボタンやリストやチェックボックスではなくて) ラベルを用いて、ラベルを押すことにより 背景が変わるプログラムを作りたいのですが どのようにイベント処理すれば、うまくいくのでしょうか。 プログラムは以下のように作りましたがイベントリスナを どのように加えればいいのかがわかりません>< よろしくお願いしますm(_ _)m import java.awt.*; import java.awt.event.*; public class Test{ public static void main(String args[]){ MyFrame f=new MyFrame("Test"); f.setVisible(true); } } class MyFrame extends Frame{ Label red, green, blue; MyFrame(String s){ super(s); setSize(200,200); setLocation(100,150); setLayout(new FlowLayout(FlowLayout.CENTER)); add(red=new Label("■")); red.setForeground(Color.red); add(green=new Label("■")); green.setForeground(Color.green); add(blue=new Label("■")); blue.setForeground(Color.blue); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } }

    • ベストアンサー
    • Java
  • AS3.0 イベントリスナーについて

    お世話になります。 簡単なflashアニメを作っています。 flash cs6 ActionScript3.0使用で、歴1ヶ月未満の初心者です。 1フレーム目に外部swfファイルを以下のように読み込んで再生させています。 var riku:URLRequest = new URLRequest("logoAnime.swf"); var yomu:Loader = Loader = new Loader(); yomu.load(riku); openingMc.addChild(yomu); 再生が終ったら、2フレーム目に移りたいのですが、具体的に どのようなコードを書いたら良いのでしょうか? 今まで色々な参考書やウェブサイトを見て勉強し、イベントリスナーメソッドを使ってマウスイベントでラベルを指定したページに移動、などはできるのですが、外部swfの再生が終ったら..となると混乱してエラー連発してしまいます。 イベントリスナーを使うのですよね? いまいち仕組みがまだ理解できていないので、丸投げのようになってしまい恐縮ですが、ご教授ください。 参考になるウェブサイト・過去回答を教えて頂くだけでも良いので、どうぞよろしくお願い致します。

    • ベストアンサー
    • Flash
  • イメージの表示に関して教えてください。

    画像を表示するアプレットです。 ボタンをクリックすると、二つの画像を交互に変換して、表示するプログラムを作りたいのですが、よく出来ません。 どうすれば、画像を変換できますか?また、「この部分はこうした方がいい」という部分があれば教えてください。 どうか、よろしくお願いします。 (スペースが表示されない・・・(^^ゞ) ***********************************************ImageDemo.java********* import java.awt.*; import java.applet.*; import java.awt.event.*; //<applet code=ImageDemo.class width=470 height=623></applet> public class ImageDemo extends Applet{ View view; Image image,image2; Panel panel_left,panel_right; Button buttonChange; boolean flag; public void init(){ flag = true; image = getImage(getDocumentBase(),"nagasaku.jpg"); image2 = getImage(getDocumentBase(),"kawamura.jpg"); view = new View(image); buttonChange = new Button("Button Change"); buttonChange.addActionListener(new myActionListener()); add(view); add(buttonChange); } class myActionListener implements ActionListener{ public void actionPerformed(ActionEvent ae){ Object obj = ae.getSource(); if(obj == buttonChange){ if(flag){ view = new View(image2); flag = false; } if(!flag){ view = new View(image); flag = true; } } } } } //////////////////////////////////////////////// class View extends Canvas{ Image image; View(Image image){ this.image = image; setSize(358,623); } public void paint(Graphics g){ g.drawImage(image,0,0,358,623,this); } }

    • ベストアンサー
    • Java
  • イメージの移動

    Java初心者です。 現在、ある背景となるビットマップ(image1)とその背景上に 描画するビットマップ(image2)をdrawImageメソッドにて Canvas上に描画させております。 image2のビットマップを画面上で移動出来る様にしたいと思っております。 移動といっても、おそらく、以前あったimage2の削除、新たな場所に描画 の繰り返しだと思います。 そこで質問です。 現在表示されているimage2だけを背景はそのままで 削除するという事は可能なのでしょうか? 可能であれば、そのメソッド、サンプル等教えていただければ幸いです。 最悪、 image1の描画→image2の描画→image1の描画→新たな位置のimage2描画 という繰り返しで出来ることは確認したのですが、なんとなくかっこ悪い 気がします。以上よろしくお願いします。

    • ベストアンサー
    • Java
  • クリックすると画像がサーっと変わっていくようなアプレットを作りたい。

    java初心者です。 画像を表示して、その画像をクリックするとサーとだんだんとその画像から、次の画像に変わっていくというアプレットを作りたいのですが、どういったメソッドなどを使えば出来るのかが分かりません。 「大体こうやれば出来そう」といったアドバイスをいただきたいです。よろしくお願いします。

  • イメージボックスについて

    こんにちわ、Visual Studio 2005のC++を使ってプログラミングしているものです。イメージボックスについてお聞きしたいのですが、 private:array< PictureBox^>^ picture; int n = 0; int m = 0; int l = 0; for ( int n = 0; n < 4; n++ ) { if(n % 4 == 0){m = m + 60; l = 0;} /** 4つずつImageboxを表示 **/ picture[n] = gcnew PictureBox(); /** イメージボックス生成 **/ picture[n]->Size = Drawing::Size( 50, 50 );  /** イメージボックスのサイズ **/ picture[n]->SizeMode = System::Windows::Forms::PictureBoxSizeMode::StretchImage; picture[n]->Location = Drawing::Point( 10+50*l,10+m);  /** イメージボックスの位置座標 **/ picture[n]->Name = String::Format( L"pictures{0}", n );  /** イメージボックスの名前 **/ this->Controls->Add( picture[n] ); Int32^ o = gcnew Int32( 0 ); System::String^ filename = "C:/Documents and Settings/user/デスクトップ/画像/"; filename += o->ToString("000") + ".bmp";  /** フォルダ内の画像 **/ bmp[n] = gcnew Bitmap(filename,true);   picture[n]->Image = bmp[n];  /** イメージボックスnにイメージn表示 **/ l++; } といった感じで、とりあえず4つのイメージボックスを作ろうとしているのですがうまくいきません。画像ファイルの名前の足し方に問題があるのでしょうか@@; もしこのプログラムが通るようになったとしてもループ中に画像がなかったらエラーが起こってしまいますね。もし指定のフォルダを選んで、そのフォルダ内の画像を全て表示させるといったことはできないのでしょうか??それと今までデザイン時にピクチャボックスをダブルクリックすると、 private: System::Void pictureBox1_Click(System::Object^ sender, System::EventArgs^ e) {} といったクリック処理のための関数が現れるのですが、この場合はどう処理すればよいのでしょう? さらに言うとこれをパネルの上でやりたいのですが・・・ private: System::Void panel1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { panel1->Controls->Add( picture[0] ); } とりあえずこれは置いといて、どうプログラムすればよいのか分かる方がいればご教授お願いします。

  • Access2002のデザインでイメージを配列することは可能でしょうか?

    アクセス2002でフォーム上にイメージをたくさん並べて、クリックするとイベントで画像を変えるようなことをしたいのですが、1個づつ名前をつけるのと、1個づつイベントを書くのが面倒なので、フォームでイメージを配列のように扱いたいのですが、可能でしょうか?

専門家に質問してみよう