• ベストアンサー

AWTのアダプタとリスナの違いについて。

はじめまして。今JAVAの勉強をしている新米SEです。早速質問なのですが、AWTのなかでアダプタとリスナってありますよね?あれは何の違いがあるんでしょうか?それぞれのソースを見ても特段違いがあるようにはみえないんですが。。。どのように使い分けするものなのでしょうか?お忙しいところ申し訳ございませんがご回答お願いいたします。

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

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

大きな違いとして、アダプタはクラス、リスナはインターフェイスですね。 文法的には、リスナだけあればいいんですが、 リスナはインターフェイスなので、必要があってもなくても 全部のメソッドを実装しなければなりません。 そこで、必要のないメソッドの実装をしなくても済むように、アダプタが用意されています。 アダプタには、空のメソッドがすでに記述されています。 必要なメソッドだけオーバライドすればいいので、便利です。 結局は、単に、便利なようにアダプタが用意されているだけです。 使わなくてもかまいません。 なお、メソッドがひとつだけのリスナにはアダプタが用意されていません。 必要がないからです。

iwa_pon
質問者

お礼

なるほど。点と点がようやく線になりました(笑)クラスとインターフェースの単純な違いなのですね。。。丁寧なご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • リスナについて

    Java を勉強している者です GUIライブラリである awt,swing のリスナについての質問です awt,swing では リスナというイベント処理用のクラスと処理内容を用意して その部品に、イベント用のリスナを登録することによって、コールバックする仕組みになっていると思います。 リスナとイベントの対応ですが、マウスリスナやキーリスナ、ボタンを押したときに対応するアクションリスナ などがありますが、多用する再描画に関しての paintListener がありません 再描画に対応する場合、常に部品を継承して、paintcomponent をオーバーライドして記述しなければなりません 再描画も重要なイベントだと思うのですがなぜリスナが用意されてないのか。 JFrame j = new JFrame(); j.addPaintListener( new PaintAdapter { void onPaint() { ... } } のように描画処理を後付できないかという質問です。 できるようならサンプルのコードを教えてください。 またpaintリスナが用意されない理由があればこれも教えていただけると幸いです。

    • ベストアンサー
    • Java
  • ListenerとAdapterの関係がよく分かりません

    実に初歩的な質問なのですが、Jappletを使う際、ListenerとAdapterがどうしても混乱してしまいます。 keyAdapterやmouseAdapterを使いたいとき、リスナー登録というものをするようですが 例えば、ActionListenerを使う時は、ActionAdapterというものは使わない気がします。 これらの違いは何なのでしょうか。 また、Adapterを使わずに、keyListenerやmouseListenerのみで、Adapterと同様の動きをするプログラムは作れますか。 簡単な例でいいので、ご教授おねがいできないでしょうか。 それではよろしくおねがいします。

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

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

    • ベストアンサー
    • Java
  • AWTでウィンドウを閉じる仕組み

    import java.awt.*; import java.awt.event.*; class WindowClose extends WindowAdapter{ public void windowClosing(WindowEvent we){ System.exit(0); } } class Figure extends Frame{ public Figure(String name){ setTitle(name); setLocation(300,200); setSize(300,200); setBackground(Color.ORANGE); WindowClose wc = new WindowClose(); addWindowListener(wc); } } public class Test{ public static void main(String [] args){ Figure figure = new Figure("Frame1"); figure.show(); } } 初歩的なことな質問で申し訳ないです。 このような処理でウィンドウを閉じているのですが、具体的に何を取得してどんな動作をしているのかがよくわかりません。 wcというインスタンスにウィンドウリスナーのオブジェクトが追加登録されるという感じだと思いますが、extends されているWindowAdapterクラスにはすでにウィンドウリスナーのインスタンスが実装されていますよね。一体何の意味があるのでしょうか。

    • ベストアンサー
    • Java
  • アップレットのアクションリスナーが動作しません

     アップレットにアクションリスナーをつけて、アップレットとキャンバスにアクションが来るように 下の様なコードを書いてやりましたがうまく動作しません。どこがまずいのでしょうか、宜しくお願 いします。  ・mouseClickedするとアプレットに四角を書くようにしていますが、最初に表示されてしまいます。  ・mouseEnteredするとキャンバスに四角を書くようにしていますが、最初には表示されず、 mouseEnteredでも四角を書きません。  ・"cs.paint(g);"での書き方が悪いのでしょうか。「gを解決できません」と表示されます。   "paint(g);"としても同じです、"mouseClicked"の中でも同じ書き方ですが、   「gを解決できません」というエラー表示は出ていません。  原因が全く分かりません、どこをどのように修正したら良いのでしょうか、宜しくお願い致します。 ================================================================== import java.applet.Applet; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.AffineTransform; public class ActionTest extends Applet implements MouseListener { Canvas cs ; public void init() { this.setBackground(Color.pink); Canvas cs = new Canvas( ) ; cs.setBackground(Color.green); cs.setSize( 100 , 100 ) ; this.add( cs ) ; this.addMouseListener( this ) ; } public void paint(Graphics g) { g.fillRect( 50 , 50 , 10 , 10 ) ; } public void mouseClicked(MouseEvent e) { Graphics g = getGraphics() ; setBackground( Color.cyan ) ; paint(g) ; repaint(); } public void mouseEntered(MouseEvent e) { cs.setBackground( Color.orange ) ; cs.paint(g) ; repaint(); } public void mouseExited(MouseEvent arg0) { } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { } } ==================================================================

    • ベストアンサー
    • Java
  • JDK1.1.7 と JDK1.3.1 の違い。。。

    はじめて質問いたします。 現在、JDK1.1.7 で開発したアプレットがあるのですが、 この中で、java.awt.Choice を未選択状態にする為に select(-1);  としている個所があります。 このアプレットをJavaPlug-in1.3.1 を使用して実行すると、IllegalArgumentException が発生してしまいます。 そこで、1.1.7 と 1.3.1 のソースコードを比べてみると、確かに、1.3.1 では、 select(-1) は認めていないようです。 --- JDK1.1.7 の java.awt.Choice の実装 ---> public void select(int pos) {   if (pos >= pItems.size()) {     throw new IllegalArgumentException("illegal Choice item position: " + pos);   }     :     : } <--- JDK1.1.7 --- --- JDK1.3.1 の java.awt.Choice の実装 ---> public synchronized void select(int pos) {   if ((pos >= pItems.size()) || (pos < 0)) {     <--- 違いはここだけ。。。     throw new IllegalArgumentException("illegal Choice item position: " + pos);   }     :     : } <--- JDK1.3.1 --- う~ん、まさしく、-1 を拒否していますね。 何故、このような実装の違いが出ているのでしょうか? (私的には、Java2開発者の気まぐれなのではと考えてしまいます。。) また、このアプレットを最小限の修正で1.3.1 でも正常に動作するようにしたいの ですが、1.3.1 の java.awt.Choice では未選択状態にする事は不可能なのでしょうか? ご存知の方がおられましたら、是非、お教え頂きたいと思います。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • Java AWTのコンポーネントについて

    JavaのAWTで軽量コンポーネントと重量コンポーネント、軽量コンテナ・重量コンテナとありますが、 それぞれどのようなものでしょうか? ネイティブのピアを持つもの持たないものなどの違いがあると思いますが、 具体的にどのクラスはピアを持っていて、どのクラスはピアを持っていないのかを 簡単にわかる方法はないでしょうか? 書籍やネットでは「ComponentやContainerを直接拡張したクラス」は軽量とあるのですが、 「直接拡張したクラス」は継承とは別のようなので、理解に困っております。 PanelやCanvasは重量コンポーネントという記述はみつけたのですが、 Panelなどがなんで重量なのかがわからないです。 理解できていないので、わかりづらい質問になってしまい恐縮ですが、 詳しい方いましたら教えて頂けないでしょうか。

  • フリーのJAVAプロファイラを探しています。

    私は現在、JAVAの勉強をしている新米SEです。 早速ですが、勉強用に作ったアプリケーションのGC状況等をグラフィカルに確認できるフリーのプロファイラを探しております。何かいいソフトはないでしょうか?この期に及んで...ではありますができれば日本語対応しているとうれしいです。お忙しいところ申し訳ございませんが、何卒よろしくお願い致します。

    • ベストアンサー
    • Java
  • 本当に困ってます(java)

    一度、投稿したのですが思うような回答が得られなかったので再投稿させていただきます。 javaでゲームを作りたいのでAWTを勉強しています。ゲームを作れる方はどんなサイトや、書籍ををつかいましたか?  補足:javaでゲームを作るには、AWTを勉強すれば出来ますよね?

    • ベストアンサー
    • Java
  • イベントリスナーのクラスの書きどころ

    まだまだ勉強したての超初心者で拙い質問ですが、宜しくお願い致します。 AWTのFrameクラスで参考書など何も無く勉強をしていたのですが、 イベントリスナーのクラスをどこに記述するのが一番良いのか、分かりません。 BaseFrameクラス、AFrameクラス、BFrameクラスが存在し、AFrame、BFrameはBaseFrameを継承しているとします。 windowOpened()の基本となる動作(「abc」という文字列を出力とする)はBaseFrameクラスの内部クラスに記述、 その後、AFrameクラスから実行されたFrameの場合は「abc」と出力された後に「def」と出力したい。 BFrameクラスから実行されたFrameの場合は「ghi」と出力された後に「abc」と出力したい。 とした時、AFrameクラスの方はAFrameの内部クラスで定義し、addWindowListener()により追加すれば実現出来たのですが、 BFrameクラスの場合は初めにBaseFrameクラスのwindowOpened()が実行されるので実現出来ません。 とすると、BaseFrameクラスにあるイベントリスナーの内部クラスから、 AFrame・BFrameクラスで実現したいイベントリスナーのクラスまで、 全てを完全に切り分けた方が良いのか?(切り分ければ可能だと思った) しかし、そうすると、他のコントロールについても同じ対応が必要であり、 コントロールとイベントの関連性が不透明化しないか?などと考えてしまい、 どうするのが一番か悩んでいます。どなたかご教示下さい。

    • ベストアンサー
    • Java