スイング – パート2:のActionListener、リスナー、のJButton


スイング - パート2:アクション!

説明


これは、Swing GUIを作成する上での私のチュートリアルの2番目の部分です。


導入


ここでスイングするための専用の私のチュートリアルの2番目の部分です。最初の部分では、ウィンドウを開いて、コンポーネントを配置する方法を説明しました。それは良いスタートだったが、それはいくつかの応答性を欠い!確かに、我々はインターフェイスで異なる相互作用に反応する、すなわち、どのようにイベントを処理する方法について説明します。たとえば、ユーザーがボタンをクリックしているという事実に対処するには?等...

コンセプトカバー:
- リスナー
- イベントプログラミング
- ActionListener、のWindowListener等...

リスナー


Swingはイベントアーキテクチャを採用しています。 GUIのコンポーネントが望むとき(相互作用が発生した場合にも、)確かに、それはイベントが発生することがあります。イベントは、イベントが通知されることを希望し、それに応じて反応するオブジェクトに送信されます。これらのオブジェクトは、(のリスナーです "ヘッドフォン")。リスナーを定義するには、ただのインタフェースを実装するクラスを作成します EventListener (Http://java.sun.com/j2se/1.5.0/docs/api/java/util/EventListener.html可能なリスナーのリストを参照してください)。聴取者が望んでいる、請求また、このリスナーは、グラフィカルユーザインターフェースの構成要素に登録しなければなりません "聞きます"。コンポーネントは、そのすべての登録リスナーにイベントを送出します。

ActionListener:JButtonの上のクリックに応答


具体的には、ユーザーがボタンをクリックすると警告したことにしたい場合は(JButtonの)、私たちは、クラスの注入Aを実施します ActionListener http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/ActionListener.html)(ActionListenerのは、JButtonがためのEventListenerである)と、JButtonがこのリスナーを追加します。

実際には:
//ボタンを作成するJButtonオブジェクト=新しいJButtonの("ここに");//アクションリスナーを追加します。but.addActionListener(リスナー)。
リスナーオブジェクトは、インタフェースを実装する必要があります ActionListener :だから、機能が含まれている必要があります actionPerformed. この関数は、イベントがボタンの上に発生したときに呼び出される関数です

ここでは完全な例であります:
インポートするjavax.swing。*;インポート持つjava.awt。*;*インポートjava.awt.eventの。//リスナーはテストクラスでありますパブリッククラステストのJFrameはActionListenerを実装して拡張します{/ ** *テストのコンストラクタ/パブリックテスト(){//ウィンドウのタイトル素晴らしいです("テスト");//パネルJPanelのパン=新しいJPanelの();pan.setLayout(新しいのBorderLayout());ここ//ボタンするJButtonオブジェクト=新しいJButtonの("ここに!");//リスナーを追加します。ここでは、リスナーは、このクラスでありますbut.addActionListener(この);//パネルにボタンを追加pan.add(目標、BorderLayout.CENTER)。//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。setContentPane(パン)。パック(); //ウィンドウで良いサイズにできますsetVisible(真)。}/ **テスト*はActionListenerインタフェースを実装しているため必須* /公共のボイドのactionPerformed(のActionEvent e)の{//あなたはここでボタンをクリックすると、System.out.printlnは("ここに!");}公共の静的な無効メイン(文字列[] args){新しいテスト();}}
ファイルにこのコードをコピーしてによってtest.javaをコンパイル javacの-classpath test.java "。"
、プログラムを起動するにしてください Javaのテスト.

この例では、リスナーはクラス自体です。インターフェースは尊重されているが ActionListener 機能以来、 actionPerformed 定義されています。あなたは、ボタンをクリックすると "ここに"、メッセージがコンソールに表示されます。
ここに私たちの例では、唯一のボタンがあります。我々はより多くのボタンを配置した場合、すべてのリスナーが同じクラスであれば、どのように差別化するには?確かにあれば、私たちは以下のプログラムを行います。

インポートするjavax.swing。*;インポート持つjava.awt。*;*インポートjava.awt.eventの。パブリッククラステストのJFrameはActionListenerを実装して拡張します{プライベートJButtonのBut1、but2。 //ボタン/ ** *テストのコンストラクタ/パブリックテスト(){//ウィンドウのタイトル素晴らしいです("テスト");//パネルJPanelのパン=新しいJPanelの();pan.setLayout(新しいのBorderLayout());ここ//ボタンBut1 =新しいJLabelの("ここに!");//リスナーを追加します。ここでは、リスナーは、このクラスでありますbut1.addActionListener(この);//パネルにボタンを追加pan.add(But1、BorderLayout.CENTER)。//ボタンの第二but2 =新しいJLabelの("第2回!");but2.addActionListener(この);pan.add(but2、BorderLayout.SOUTH)。//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。setContentPane(パン)。パック(); //ウィンドウで良いサイズにできますsetVisible(真)。}/ **テスト*はActionListenerインタフェースを実装しているため必須* /公共のボイドのactionPerformed(のActionEvent e)の{//あなたはここでボタンをクリックすると、System.out.printlnは("ここに!");}公共の静的な無効メイン(文字列[] args){新しいテスト();}}
あなたは、ボタンをクリックすると、 "ここに" と "第2回"同じメッセージが得られます。これら二つのボタンが同じイベントハンドラので、同じリスナーを共有するので、これは正常です。

2つのソリューションは、ボタンに応じて異なる処理を行うために、私たちに用意されています。
- または私達は実装二つの異なるクラスを作成しました ActionListener 各ボタンに関連付けされます
- いずれかの主題を使用して、 ActionEvent の使用済みパラメータ actionPerformed 2つのコンポーネントを区別します。
私たちは、もちろんこれら二つの解決策が表示されます!

ソリューション:のActionEventを使用して
ページでhttp://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/ActionEvent.htmlの方法を見ることができます ActionEvent. 機能 getSource() 我々は参考になります。

getSource() イベントを発生させたコンポーネントを返します。

したがって、ボタンによる処理を区別するために、それはによって返されるオブジェクトに応じて反応します getSource()
ここで新しいのactionPerformed()関数は次のとおりです。

公共のボイドのactionPerformed(のActionEvent e)の{オブジェクトソース= e.getSource()。もし(ソース== But1)System.out.printlnは("ここに!");それ以外の場合(ソース== but2)System.out.printlnは("第2回!");}
今、あなたは、ボタンをクリックすると、 "第2回!"メッセージが表示されます "第2回!"。私たちは2つのトリートメントを分化しました。

同じリスナーで一緒にすべての処理をもたらすソリューションは、時には非常に実用的で単純なことができます(ただし)が、私の意見では、それは非常にきれいではありません。我々は、次を参照するソリューションは、私の意見でははるかに優れています。

ソリューション:ボタンでクラス
私たちの2つのボタンのための治療を区別するために、我々は、2つの異なるクラスを作成しました:
インポートするjavax.swing。*;インポート持つjava.awt。*;*インポートjava.awt.eventの。パブリッククラステストのJFrameを拡張します{プライベートJButtonのBut1、but2。 //ボタン/ ** *テストのコンストラクタ/パブリックテスト(){//ウィンドウのタイトル素晴らしいです("テスト");//パネルJPanelのパン=新しいJPanelの();pan.setLayout(新しいのBorderLayout());ここ//ボタンBut1 =新しいJLabelの("ここに!");//リスナーを追加します。ここでは、リスナーは、このクラスでありますbut1.addActionListener(新しいTraitementBut1());//パネルにボタンを追加pan.add(But1、BorderLayout.CENTER)。//ボタンの第二but2 =新しいJLabelの("第2回!");but2.addActionListener(新しいTraitementBut2());pan.add(but2、BorderLayout.SOUTH)。//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。setContentPane(パン)。パック(); //ウィンドウで良いサイズにできますsetVisible(真)。}公共の静的な無効メイン(文字列[] args){新しいテスト();}パブリッククラスはActionListenerのTraitementBut1を実装します{/ **テスト*はActionListenerインタフェースを実装しているため必須* /公共のボイドのactionPerformed(のActionEvent e)の{System.out.printlnは("ここに!");}}パブリッククラスはActionListenerのTraitementBut2を実装します{/ **テスト*はActionListenerインタフェースを実装しているため必須* /公共のボイドのactionPerformed(のActionEvent e)の{System.out.printlnは("第2回!");}}}
TraitementBut1クラスは、ボタンのイベントを管理します "ここに" ボタンとTraitementBut2クラス "第2回!"。

他のリスナー


イベントのいずれかのタイプのlListeners膨大な種類のがあります。各GUIコンポーネントのイベント。

ここではリスナーの小さなリストは、次のとおりです。
  • WindowListener:ウィンドウ上のすべてのイベント(オープニング、クロージング、選択など)
  • MouseListener:マウスに関するすべてのイベント(、などをクリックしてください)
  • MouseMotionListener:マウスの移動に関するすべてのイベント

...

ワードリスナーを持つすべてのクラスはhttp://java.sun.com/j2se/1.5.0/docs/api/ページを見て、リスナーであります!

終了


この第二の部分は終わりました。あなたは私にあなたのコメント/注釈を送信することができます。
スイング - パート2:のActionListener、リスナー、のJButtonこの記事(PDF)をダウンロード tucobouch投稿者。 」と題されたこの文書 スイング - パート2:のActionListener、リスナー、JButtonが»からコード・ソース (Codes-sources.commentcamarche.net)クリエイティブ・コモンズのライセンスの下で利用できるようになります。あなたはライセンスの定める条件の下で、このページのコピーを変更、コピーすることができ、このノートとして明確に表示されます。この記事をダウンロードする(PDF