1. 이벤트 모니터링
테스트 코드 1 :
패키지 cn.javastudy.summary; import java.awt.*; import java.awt.event.*; public class testtextfield {public static void main (String args []) {new myframetextfield (); }} class myframetextfield 확장 프레임 {myframetextfield () {textfield tf = new Textfield (); 추가 (tf); tf.addactionListener (New Monitor3 ()); tf.setechochar ( '*'); / * *이 setechochar () 메소드는 텍스트 상자에 입력 할 때 표시된 문자를 설정하는 것입니다. 여기에서는 *로 설정되므로 입력 컨텐츠가 *로 표시되지만 인쇄 할 때는 입력 컨텐츠를 볼 수 있습니다. */ setvisible (true); 팩(); }} class monitor3를 구현하십시오 actionListener { / * * 인터페이스의 모든 메소드는 공개 (공개) * API 문서에서 void actionPerformed (ActionEvent e)를 복사 할 때 void * /public void actionPerformed (ActionEvent e) { / * 이벤트의 관련 정보는 객체 e에 캡슐화됩니다. 이벤트의 관련 정보는 객체 E*/ TextField TF = (TextField)의 관련 방법을 통해 얻을 수 있습니다. getSource (); / * * getSource () 메소드는 이벤트 소스를 얻는 것입니다. 참고 :이 이벤트 소스를 얻을 때 * 텍스트 필드의 부모 클래스로 취급하십시오. getSource () 메소드의 정의는 다음과 같습니다. "public object getSource ()"return 값은 객체 객체입니다. * 따라서 텍스트 필드 유형의 객체에 캐스트해야합니다. tf.settext ( ""); // 텍스트 상자에서 내용을 지우십시오}} 테스트 코드 2 :
패키지 cn.javastudy.summary; import java.awt.*; import java.awt.event.*; public static void main (String args []) {frame f = new Frame ( "trevationEvent"); 버튼 btn1 = 새 버튼 ( "시작"); 버튼 btn2 = 새 버튼 ( "정지"); Monitor2 M2 = New Monitor2 (); // 청취 개체 생성 BTN1.AddActionListener (M2); /*청취 객체는 동시에 두 버튼의 동작에 대해 듣는다*/ btn2.addactionListener (M2); btn2.setactionCommand ( "GameOver"); // btn2 f.add (btn1, borderlayout.north)의 클릭 명령을 실행 한 후 반환 정보를 설정합니다. f.add (btn2, borderlayout.center); f.pack (); F. 세트 Visible (true); }} Class Monitor2는 ActionListener를 구현합니다 {public void ActionPerformed (ActionEvent e) {System.out.println ( "버튼을 누릅니다."+"상대 정보는 :/n"+e.getActionCommand ()); /* 반환 된 청취 개체 e를 사용하여 getActionCommand () 메소드를 호출하여 두 버튼이 클릭 명령을 실행 한 후 반환 정보를 얻습니다. 다른 반환 정보에 따르면, 어떤 버튼이 현재 작업인가. BTN1은 setActionCommand () 메소드를 설정하지 않으므로 BTN1이 반환 한 정보는 버튼*/}에 표시된 텍스트입니다.2. 텍스트 필드 이벤트 모니터링
테스트 코드 :
패키지 cn.javastudy.summary; import java.awt.*; import java.awt.event.*; public class testtextfield {public static void main (String args []) {new myframetextfield (); }} class myframetextfield 확장 프레임 {myframetextfield () {textfield tf = new Textfield (); 추가 (tf); tf.addactionListener (New Monitor3 ()); tf.setechochar ( '*'); / * *이 setechochar () 메소드는 텍스트 상자에 입력 할 때 표시된 문자를 설정하는 것입니다. 여기에서는 *로 설정되므로 입력 컨텐츠가 *로 표시되지만 인쇄 할 때는 입력 컨텐츠를 볼 수 있습니다. */ setvisible (true); 팩(); }} class monitor3를 구현하십시오 actionListener { / * * 인터페이스의 모든 메소드는 공개 (공개) * API 문서에서 void actionPerformed (ActionEvent e)를 복사 할 때 void * /public void actionPerformed (ActionEvent e) { / * 이벤트의 관련 정보는 객체 e에 캡슐화됩니다. 이벤트의 관련 정보는 객체 E*/ TextField TF = (TextField)의 관련 방법을 통해 얻을 수 있습니다. getSource (); / * * getSource () 메소드는 이벤트 소스를 얻는 것입니다. 참고 :이 이벤트 소스를 얻을 때 * 텍스트 필드의 부모 클래스로 취급하십시오. getSource () 메소드의 정의는 다음과 같습니다. "public object getSource ()"return 값은 객체 객체입니다. * 따라서 텍스트 필드 유형의 객체에 캐스트해야합니다. 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 () {/** 초기 크기를 각각 10 자와 15 자로 지정합니다. 다음은 Textfield 클래스 공개 텍스트 필드 (int columns) */ textfield num1 = new Textfield (10)의 또 다른 구성 방법입니다. Textfield Num2 = New Textfield (10); Textfield Num3 = New Textfield (15); /* 동일 부호 만들기 버튼을 만듭니다*/ 버튼 btnequal = 새 버튼 ( "="); btnequal.addactionListener (new mymonitor (num1, num2, num3)); /* 버튼*/ 레이블 LBLPLUS = 새 레이블 ( "+")을 클릭 한 후 응답 이벤트가 발생하도록 동일 부호 버튼에 리스너를 추가하십시오. /* "+"는 정적 텍스트이므로 레이블 클래스를 사용하여 정적 텍스트 객체를 만듭니다*/ setLayout (new FlowLayout ()); /* 프레임의 기본 경계선 레이아웃을 FlowLayout 레이아웃으로 변경*/ add (num1); 추가 (lblplus); 추가 (num2); 추가 (btnequal); 추가 (num3); 팩(); setvisible (true); }} 클래스 mymonitor는 ActionListener {Textfield Num1, Num2, Num3를 구현합니다. / * * 버튼의 청취가 텍스트 상자에서 작동 할 수 있도록하기 위해, * 따라서 사용자 정의 클래스의 3 개의 텍스트 필드 객체는 num1, num2, num3에 정의되어 있습니다. * Mymonitor 클래스의 생성자 메소드도 정의합니다. 이 생성자 방법은 텍스트 필드 유형의 3 가지 매개 변수를 가지고 있으며 * *는 tfframe 클래스에서 전달 된 텍스트 필드 유형의 세 가지 매개 변수를 수신하는 데 사용됩니다. 그런 다음 ActionPerformed () 메소드 */ public mymonitor (Textfield Num1, Textfield Num2, Textfield 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 (). junchframe (); /* ttmyframe 객체를 생성하고 lauchframe () 메소드를 호출하여 계산기 양식*/}}}/* 계산기의 양식 인터페이스를 표시합니다*/class ttmyframe fram public void 런치 프레임 () {num1 = new Textfield (10); num2 = 새로운 텍스트 필드 (15); num3 = 새로운 텍스트 필드 (15); label lblplus = 새 레이블 ( "+"); 버튼 btnequal = 새 버튼 ( "="); btnequal.addactionListener (New MyMonitorBtnequal (this)); setLayout (new FlowLayout ()); 추가 (num1); 추가 (lblplus); 추가 (num2); 추가 (btnequal); 추가 (num3); 팩(); setvisible (true); }}/ * * 여기에서 ttmyframe 클래스에 대한 참조를 얻은 다음이 참조를 사용하여 ttmyframe 클래스의 멤버 변수에 액세스하는 것이 ttmyframe 클래스에서 멤버 변수에 직접 액세스하는 방법보다 훨씬 낫습니다. *이 ttmyframe 클래스 객체는 큰 가정부와 같으며 큰 가정부에게 ttmyframe 클래스의 회원 변수에 액세스하고 싶다고 말했습니다. * 큰 가정부의 참조는 더 이상 그것을 찾을 필요가 없습니다. * 한 클래스에서 다른 클래스에 대한 참조를 보유하는이 사용은 매우 일반적인 사용법입니다.* 획득 한 참조를 사용하여 한 클래스의 다른 클래스의 모든 멤버에 액세스하십시오*/클래스 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 (). junchframe (); }} class mymathframe 확장 프레임 {Textfield Num1, Num2, Num3; public void 런치 프레임 () {num1 = new Textfield (10); num2 = 새로운 텍스트 필드 (15); num3 = 새로운 텍스트 필드 (15); label lblplus = 새 레이블 ( "+"); 버튼 btnequal = 새 버튼 ( "="); btnequal.addactionListener (new MyMonitor ()); setLayout (new FlowLayout ()); 추가 (num1); 추가 (lblplus); 추가 (num2); 추가 (btnequal); 추가 (num3); 팩(); setvisible (true); } /**이 mymonitor 클래스는 내부 클래스로, 래퍼 클래스* / /** 내부 클래스를 사용하는 것의 이점 :* 첫 번째 큰 이점은 외장 클래스의 모든 멤버 변수와 방법에 액세스 할 수 있다는 것입니다. (외부 클래스),* mymonitor (내부 클래스)에서 직접 액세스 할 수 있습니다.* 이것은 외부 클래스 객체를 생성 할 때 외부 클래스 객체를 참조하는 내부 클래스 객체와 동일합니다.*/ private class mymonitor는 ActionListener (actionEvent e) {int n1 = integer.parseint (num1.gettext (gettext); 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 (). unkerframe (); /*페인트 (그래픽 g) 메소드는 main () 메소드로 표시되지 않지만 프레임 양식을 작성한 후 원과 사각형이 프레임 형식에 그려진다는 것을 알 수 있습니다. 페인트 () 메소드가 특별한 방법이기 때문입니다. 프레임 양식을 만들 때 암시 적으로 자동으로 호출됩니다. 프레임 양식을 최소화하고 다시 열면 페인트 () 메소드를 다시 호출하고 프레임 형식의 원과 사각형을 그립니다. 즉, 프레임 양식을 다시 칠해야 할 때마다 페인트 () 메소드는 자동으로*/}} 클래스 myPaint frame {public void 런치 프레임 () {setBounds (200,200,640,480); setvisible (true); } public void paint (그래픽 g) { / *페인트 (그래픽 g) 메소드는 그래픽 유형 매개 변수 g를 가지고 있습니다.이 g는 화가로 처리 할 수 있고, 화가는 브러시를 손에 잡고 브러시의 색상과 모양을 설정하여 원하는 다양한 이미지를 그립니다 * / g.setColor (색상). g.filloval (100,100,100,100);/*견고한 타원을 그립니다*/ g.setcolor (color.green); G.FillRect (150,200,200);/*견고한 사각형을 그리십시오*//*아래 두 줄의 코드는 글쓰기 프로그램에서 좋은 프로그래밍 습관을 위해 작성되었습니다. 이제 브러시의 초기 색상을 복원해야합니다.이 색상은 브러시*/ 색상 C = G.getColor ()를 사용한 후 브러시의 색상을 청소하는 것과 같습니다. G. 세트 콜러 (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 확장 프레임 {arraylist points = null; myframe (문자열 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); }} 클래스 모니터 확장 MouseAdapter {public void mousepressed (mouseevent 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.*; public class testwindowclose {public static void main (String args []) {새 창 프레임 ( "close windowframe"); }} class WindowFrame 확장 프레임 {public WindowFrame (String S) {super (s); 세트 바운드 (200,200,400,300); setLayout (null); 좌절장 (새로운 컬러 (204,204,255)); setvisible (true); this.addwindowlistener (new windowmonitor ());/*이 형식의 행동을 듣고, 모든 행동 정보를 객체에 캡슐화하고 청취 클래스에 캡슐화하고이를 청취 클래스*/this.addwindowlistener (/*방법에서 클래스를 정의합니다.이 클래스는 익명의 내부 클래스라고도합니다. WindowAdapter 클래스 로서이 구문의 필수 의미는 WindowAdapter 클래스 의이 익명 클래스의 상속과 동일합니다. }}); } /*청취 클래스는 내부 클래스로 정의됩니다* /클래스 Windowmonitor 확장 WindowAdapter { /*Windowadapter (Window Adapter) 클래스는 Windowlistener 청취 인터페이스를 구현합니다. 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.*; public class testkeyEvent {public static void main (String args []) {new KeyFrame ( "키보드 응답 이벤트"); }} class keyframe 확장 프레임 {public keyframe (string s) {super (s); 세트 바운드 (200,200,400,300); setLayout (null); setvisible (true); AddKeylistener (new keymonitor ()); } /*사용자 정의 키보드 청취 클래스를 내부 클래스로 정의합니다. 이 청취 클래스는 키보드 어댑터 KeyAdapter 클래스에서 상속됩니다. KeyAdapter 클래스에서 상속됩니다. 간결하고 편리하기 위해서는 사용하는 방법 만 다시 작성하면됩니다. 이 방법은 Keylistener 인터페이스를 직접 구현하는 것보다 간단하고 편리합니다. Keylistener 인터페이스를 직접 구현하면 Keylistener 인터페이스에서 모든 메소드를 다시 작성해야하지만 실제로 하나의 방법 만 사용됩니다. 이러한 방식으로 다른 방법을 다시 작성하지만 사용하지 않으면 필연적으로 쓸모없는 작업을 수행합니다*/ 클래스 KeyMonitor는 KeyAdapter {public void keypressed (keyEvent e) {int keyCode = e.getKeyCode (); /*getKeyCode () 메소드를 사용하여 키의 가상 코드를 가져옵니다* / /*획득 된 키의 가상 코드가 UP 키의 가상 코드와 같으면 현재 누르는 키가 UP 키 키 이벤트임을 의미합니다. 키보드의 각 키는 가상 코드에 해당합니다. 이 가상 코드는 KeyEvent 클래스에서 정적 상수로 정의됩니다. 따라서 "class name.static 상수 이름"형식을 사용하여 이러한 정적 상수에 액세스 할 수 있습니다*/ if (keyCode == keyEvent.vk_up) {System.out.println ( "UP 키를 누릅니다"); }}}}/*키보드는 다음과 같은 이벤트를 처리합니다. 각 키는 가상 코드에 해당합니다. 특정 키를 눌렀을 때 시스템은이 키에 해당하는 가상 코드를 찾아 현재 누르는 키를 결정합니다*/이 기사를 통해 GUI 프로그래밍을 배웠습니다. GUI 프로그래밍에 대한보다 포괄적 인 이해가 있기를 바랍니다. GUI 프로그래밍에는 이보다 더 많은 것이 있으며 계속 학습해야합니다.