1。イベント監視
テストコード1:
パッケージcn.javastudy.summary; import java.awt。*; import java.awt.event。*; public class testextfield {public static void main(string args []){new myframetextfield(); }} class myframetextfield拡張frame {myframetextfield(){textfield tf = new Textfield(); add(tf); tf.AddActionListener(new Monitor3()); tf.setechochar( '*'); / * *このSeteChoChar()メソッドは、テキストボックスに入力するときに表示される文字を設定することです。ここでは *に設定されているため、入力コンテンツは *として表示されますが、[ */ setVisible(true)を印刷するときも入力コンテンツが表示されます。パック(); }} class Monitor3はActionListener { / * *インターフェイス内のすべてのメソッドがpublic(public) *を実装しているため、APIドキュメントからVoid ActionPerformed(ActionEvent e)をコピーする場合、void * /public void actionporformed(actionevent e){ / *イベントの関連情報はオブジェクトEに囲まれています。イベントの関連情報は、オブジェクトe*/ textfield tf =(textfield)e.getSource()の関連する方法を通じて取得できます。 / * * getSource()メソッドは、イベントソースを取得するためです。注:このイベントソースを取得したら、 *テキストフィールドの親クラスとして扱います。 getSource()メソッドの定義は次のとおりです。「public object getSource()」はオブジェクトオブジェクトです *したがって、Textfieldのタイプのオブジェクトにキャストする必要があります * 1つのクラスで別のクラスのイベントソースオブジェクトにアクセスする場合は、GetSource()Method */ system.out.println(tf.getText()); tf.settext( ""); //テキストボックスのコンテンツをクリア}}テストコード2:
パッケージcn.javastudy.summary; import java.awt。*; import java.awt.event。*; public class testactionevent2 {public static void main(string args []){frame f = new Frame( "testactionEvent");ボタンbtn1 = newボタン( "start");ボタンbtn2 = new Button( "Stop"); Monitor2 M2 = new Monitor2(); //リスニングオブジェクトBTN1.AddActionListener(M2); /*リスニングオブジェクトは、同時に2つのボタンのアクションを聴きます*/ btn2.addactionlistener(M2); BTN2.SETACTIONCOMMAND( "GameOver"); // btn2 f.add(btn1、borderlayout.north)のクリックコマンドを実行した後、返品情報を設定します。 f.add(btn2、borderlayout.center); f.pack(); f.setVisible(true); }} class Monitor2 explence ActionListener {public void actionPerformed(actionEvent e){system.out.println( "ボタンが押されました"+"相対情報は:/n"+e.getActionCommand()); /*返されたリスニングオブジェクトEを使用して、2つのボタンがクリックコマンドを実行した後、getActionCommand()メソッドを呼び出して戻り情報を取得します。さまざまな返品情報によると、どのボタンが現在の操作です。 BTN1はSetactionCommand()メソッドを使用して設定していないため、BTN1によって返される情報はボタンに表示されるテキスト*/}}です。2。テキストフィールドイベント監視
テストコード:
パッケージcn.javastudy.summary; import java.awt。*; import java.awt.event。*; public class testextfield {public static void main(string args []){new myframetextfield(); }} class myframetextfield拡張frame {myframetextfield(){textfield tf = new Textfield(); add(tf); tf.AddActionListener(new Monitor3()); tf.setechochar( '*'); / * *このSeteChoChar()メソッドは、テキストボックスに入力するときに表示される文字を設定することです。ここでは *に設定されているため、入力コンテンツは *として表示されますが、[ */ setVisible(true)を印刷するときも入力コンテンツが表示されます。パック(); }} class Monitor3はActionListener { / * *インターフェイス内のすべてのメソッドがpublic(public) *を実装しているため、APIドキュメントからVoid ActionPerformed(ActionEvent e)をコピーする場合、void * /public void actionporformed(actionevent e){ / *イベントの関連情報はオブジェクトEに囲まれています。イベントの関連情報は、オブジェクトe*/ textfield tf =(textfield)e.getSource()の関連する方法を通じて取得できます。 / * * getSource()メソッドは、イベントソースを取得するためです。注:このイベントソースを取得したら、 *テキストフィールドの親クラスとして扱います。 getSource()メソッドの定義は次のとおりです。「public object getSource()」はオブジェクトオブジェクトです *したがって、Textfieldのタイプのオブジェクトにキャストする必要があります * 1つのクラスで別のクラスのイベントソースオブジェクトにアクセスする場合は、GetSource()Method */ system.out.println(tf.getText()); tf.settext( ""); //テキストボックスのコンテンツをクリア}} Textfieldクラスを使用してシンプルな計算機を実装します
パッケージcn.javastudy.summary; import java.awt。*; import java.awt.event。*; public class testmath {public static void main(string args []){new tfframe(); }}/*ここでは、主に計算機要素のレイアウトを完了するためです*/class tfframe拡張フレーム{tfframe(){/** 3つのテキストボックスを作成し、それぞれ10文字と15文字の初期サイズを指定します。これは、Textfieldクラスのパブリックテキストフィールド(int列)の別の構造方法です */ textfield num1 = new Textfield(10); Textfield num2 = new Textfield(10); Textfield num3 = new Textfield(15); /*等記号ボタンを作成*/ボタンbtnequal = new Button( "="); btnequal.addactionlistener(new mymonitor(num1、num2、num3)); /*ボタンをクリックした後に応答イベントが発生するようにリスナーを等記号ボタンに追加します*/ label lblplus = new label( "+"); /* "+"は静的テキストなので、ラベルクラスを使用して静的テキストオブジェクトを作成します*/ setLayout(new FlowLayout()); /*フレームのデフォルトのborderlayoutレイアウトをフローレイアウトレイアウトに変更*/ add(num1); add(lblplus); add(num2); add(btnequal);追加(num3);パック(); setVisible(true); }} class mymonitorはactionlistener {textfield num1、num2、num3; / * *ボタンのリスニングがテキストボックスで動作できるようにするために、 *したがって、カスタムクラスの3つのテキストフィールドオブジェクトは、num1、num2、num3、 *で定義されます。このコンストラクターメソッドには、tfframeクラス *から渡されたテキストフィールドタイプの3つのパラメーターを受信するためにテキストフィールドタイプの3つのパラメーターがあり、受信したテキストフィールドタイプの3つのパラメーターを、このクラスで宣言されたテキストフィールドタイプの3つのパラメーターに割り当てます。次に、ActionPerformed()Method */ public MyMonitor(Textfield num1、textfield num2、textfield num3)でnum1、num2、num3を処理します{this.num1 = num1; this.num2 = num2; this.num3 = num3; } public void actionperformed(ActionEvent e){ /*イベントの関連情報は、オブジェクトeにカプセル化されています。イベントの関連情報は、オブジェクトe*/ int n1 = integer.parseint(num1.getText());/*num1オブジェクトの関連するメソッドを介して取得できます。 num3.Settext( "" +(n1 + n2));/* num3オブジェクトは、settext()メソッドを呼び出して、独自の表示テキスト*/ num1.settext( ""); / *計算が完了したら、num1およびnum2テキストボックスの内容をクリアします */ num2.settext( ""); // num3.settext(string.valueof((n1+n2))); /*文字列が「+」を使用して任意のタイプのデータに接続されている場合、文字列は文字列でなければなりません。 *ここに空の文字列とintタイプ番号があります。これにより、(n1+n2)で取得されたintタイプ番号を文字列に直接変換できます。 *これは、他の基本データ型を文字列に変換するための小さなトリックです。 *「string.valueof((n1+n2))」を使用して、(n1+n2)の合計を文字列に変換することもできます */}} Javaでの古典的な使用:あるクラスで別のクラスへの参照を保持する
パッケージcn.javastudy.summary; import java.awt。*; import java.awt.event。*; public class testmath1 {public static void main(string args []){new ttmyframe()。launchframe(); /* ttmyframeオブジェクトを作成し、lauchframe()メソッドを呼び出して計算機フォームを表示します*/}}/*計算機のフォームインターフェイスを作成します*/class ttmyframeはフレームを拡張します{/*計算機フォームをメソッドに設計するコードをカプセル化します*/textfield num1、num2、num3; public void launchframe(){num1 = new Textfield(10); num2 = new Textfield(15); num3 = new Textfield(15);ラベルlblplus = new Label( "+");ボタンbtnequal = new Button( "="); btnequal.addactionlistener(new mymonitorbtnequal(this)); setLayout(new FlowLayout());追加(num1); add(lblplus); add(num2); add(btnequal);追加(num3);パック(); setVisible(true); }}/ * *ここでは、ttmyframeクラスへの参照を取得し、この参照を使用してttmyframeクラスのメンバー変数にアクセスすることにより *このアプローチは、ttmyframeクラスのメンバー変数に直接アクセスするために以前の方法よりもはるかに優れています。 *このTTMYFRAMEクラスオブジェクトは大きな家政婦のようなものであり、TTMYFrameクラスのメンバー変数にアクセスしたいと言っています。 *あるクラスの別のクラスへの参照を保持するこの使用法は非常に典型的な使用法です*取得した参照を使用して、1つのクラスの別のクラスのすべてのメンバーにアクセスします*/class mymonitorbtnequal実装actionlistener {ttmyframe ttmf = null; public mymonitorbtnequal(ttmyframe ttmf){this.ttmf = ttmf; } public void ActionPerformed(actionEvent e){int n1 = integer.parseint(ttmf.num1.getText()); int n2 = integer.parseint(ttmf.num2.getText()); ttmf.num3.settext( "" +(n1 + n2)); ttmf.num1.settext( ""); ttmf.num2.settext( ""); }}操作結果は次のとおりです。
iii。内部クラス
内部クラスの例:
パッケージcn.javastudy.summary; import java.awt。*; import java.awt.event。*; public class testmath3 {public static void main(string args []){new mymathframe()。launchframe(); }} class mymathframeはframe {textfield num1、num2、num3; public void launchframe(){num1 = new Textfield(10); num2 = new Textfield(15); num3 = new Textfield(15);ラベルlblplus = new Label( "+");ボタンbtnequal = new Button( "="); btnequal.addactionlistener(new mymonitor()); setLayout(new FlowLayout());追加(num1); add(lblplus); add(num2); add(btnequal);追加(num3);パック(); setVisible(true); } /**このmymonitorクラスは内部クラスであり、ラッパークラスと呼ばれるmyframeクラスのmyframeクラスを定義します* / /**内側のクラスを使用する利点:*最初の大きな利点は、外部クラスのすべてのメンバー変数とメソッドにアクセスできることです(すなわち、内側クラスのラッパークラス)障害物なしで障害物なし*。クラス)、*外部クラスオブジェクトを作成するときにデフォルトで外部クラスオブジェクトを参照する内部クラスオブジェクトに直接アクセスできます。 int n2 = integer.parseint(num2.getText()); num3.Settext( "" +(n1 + n2)); num1.settext( ""); num2.settext( ""); }}}内部クラスの大きな利点は次のとおりです。
4。グラフィックス
テストコード:
パッケージcn.javastudy.summary; import java.awt。*; public class testpaint {public static void main(string args []){new mypaint()。launchframe(); /*ペイント(グラフィックG)メソッドはMain()メソッドには表示されませんが、フレーム形式を作成した後、フレーム形式に円と長方形が描かれていることがわかります。これは、Paint()メソッドが特別な方法であるためです。フレームフォームを作成するときに、自動的に暗黙的に呼び出されます。フレームフォームを最小限に抑えて再度開くと、ペイント()メソッドを再度呼び出し、フレームフォームに円と長方形を描画します。つまり、フレームフォームを塗り直す必要があるたびに、ペイント()メソッドは自動的に*/}} class myPaint拡張フレーム{public void launchframe(){setBounds(200,200,640,480); setVisible(true); } public void paint(グラフィックスG){ / *ペイント(グラフィックg)メソッドにはグラフィック型パラメーターGがあります。このgを画家として扱うことができます。画家はブラシを手に渡します。 g.filloval(100,100,100,100);/*固体楕円を描く*/ g.setcolor(color.green); G.FillRect(150,200,200);/*堅実な長方形を描く*//これで、画家がブラシを使い果たした後、ブラシの色を掃除するのと同等のブラシの初期色を復元する必要があります*/ color c = g.getColor(); G.SetColor(C); }}実行結果:
5。マウスイベントアダプター
テストコード:
パッケージcn.galc.test; Import java.awt。*; import java.awt.event。*; import java.util。*; public class mymouseadapter {public static void main(string args []){new MyFrame( "Drawing ..."); }} class myFrame拡張frame {arrayList points = null; myframe(string s){super(s); Points = new ArrayList(); SetLayout(null);セットバウンド(300,300,400,300); this.setbackground(新しい色(204,204,255)); setVisible(true); this.addmouseListener(new Monitor()); } public void paint(グラフィックスG){iterator i = points.iterator(); while(i.hasnext()){point p =(point)i.next(); g.setcolor(color.blue); G.Filloval(PX、PY、10,10); }} public void addpoint(point p){points.add(p); }} class MonitorはMouseadapterを拡張します{public void mousepressed(mousevent e){myframe f =(myframe)e.getSource(); f.addpoint(new Point(e.getx()、e.gety())); f.repaint(); }}6。Windowsイベント
テストコード:
パッケージcn.galc.test; Import java.awt。*; import java.awt.event。 }} class windowframeはframe {public windowframe(string s){super(s);セットバウンド(200,200,400,300); SetLayout(null); setbackground(新しい色(204,204,255)); setVisible(true); this.addwindowlistener(new WindowMonitor());/*このフォームのアクションを聞き、すべてのアクション情報をオブジェクトにカプセル化し、リスニングクラスに渡す*/this.Addwindowlistener(/*メソッドのクラスを定義します。この構文の本質的な意味は、この匿名クラスのこの匿名クラスの継承に相当します。 system.exit(-1); } /*リスニングクラスは、内部クラスとして定義されます* /class Windowmonitorはwindowadapter { /*windowadapter(window adapter)クラスを拡張します。クラスはウィンドウリストナーリスニングインターフェイスを実装します。 WindowListenerインターフェイスのすべてのメソッドを書き換えます。 Custom WindowMonitorクラスを直接使用してWindowListenerインターフェイスを直接実装する場合、WindowListenerインターフェイスのすべてのメソッドを書き換える必要があります。ただし、これらのメソッドのいずれかを使用する必要があります。したがって、WindowListenerリスニングインターフェイスのサブクラスを継承し、このサブクラスで使用する必要がある方法を書き直すことができます。この方法は、WindowListenerリスニングインターフェイスを直接実装するよりもはるかにシンプルで便利です。 */*使用する必要があるWindowClosing(WindowEvent e)メソッドを書き換えます*//*public void windowclosing(windowevent e){setVisible(false);/*フォームを表示しないように設定します。7。キーボード応答イベント-KeyEvent
テストコード:
パッケージcn.galc.test; Import java.awt。*; import java.awt.event。 }} class keyframeはframe {publy keyframe(string s){super(s);セットバウンド(200,200,400,300); SetLayout(null); setVisible(true); addKeyListener(new KeyMonitor()); } /*カスタムキーボードリスニングクラスを内部クラスとして定義します。このリスニングクラスは、キーボードアダプターKeyAdapterクラスから継承されます。 KeyAdapterクラスから継承します。簡潔で便利にするためには、使用する必要がある方法を書き換えるだけです。この方法は、KeyListenerインターフェイスを直接実装するよりもシンプルで便利です。 KeyListenerインターフェイスを直接実装する場合、KeyListenerインターフェイスのすべてのメソッドを書き換える必要がありますが、実際に使用される方法は1つだけです。このようにして、他の方法を書き直しますが、それらを使用しないことは必然的に役に立たない作業を行います*/ class keymonitorはkeyadapter {public void keypressed(keyevent e){int keycode = e.getkeycode(); /*getKeycode()メソッドを使用してキーの仮想コードを取得します* / /*取得したキーの仮想コードがUPキーの仮想コードに等しい場合、現在押し付けられているキーがUPキーEvent.vk_upがUPキーを取得する仮想コードを意味します。キーボード内の各キーは、仮想コードに対応しています。これらの仮想コードは、KeyEventクラスの静的定数として定義されます。したがって、「クラス名」の形式を使用して、これらの静的定数*/ if(keycode == keyevent.vk_up){system.out.println( "you you you culs up key"); }}}}/*キーボードは次のようなイベントを処理します。各キーは仮想コードに対応します。特定のキーが押されると、システムはこのキーに対応する仮想コードを見つけて、どのキーが現在押されているかを判断します*/この記事を通して、私はあなたと一緒にGUIプログラミングを学びました。 GUIプログラミングをより包括的に理解できることを願っています。 GUIプログラミングにはこれ以上のものがあり、学習を継続する必要があります。