Java GUI 基礎知識2 監聽機制

TestActionEvent.java

沒有調用方法,但是有反應。反應自己要編寫程序有反應。

事件模型:一定要有某些反應。

寫程序,監聽的操作是自動發生的,一直監聽。鉤子函數,(回調函數)

怎么讓它自動執行,首先告訴人家你的方法名是什么,也不知道,但是這樣好像也不行,

實現某個特定的接口,然后button類里面也有特定的方法。

事件分很多中,監聽事件的接口也有很多。但某件發生時,封裝成一個對象,當成一個參數,傳遞給監聽事件。

栗子:TestActionEvent2.java


通過把actionCommand,把一個按鈕的acitonCommand設置為別的。用來區別不同的按鈕。


栗子:TFActionEvent.java

TextField tf = (TextField)e.getSource();拿到事件源,把這個源對象當作ActionEvent的父類。

所以需要強制類型轉換。

栗子:TFPassword.java


內部類:

Frame像一個大管家,我們要拿到這個大管家的引用。

不需要內部的東西。

持有對方的引用。

直接訪問大管家。

如下面:


門面模式。拿到管家的引用。和誰有關系,使用大管家訪問他。




栗子:

package com.zhj.www;import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.*;public class TFMath {public static void main(String[] args) {new TFFrame().launchFrame();}
}
class TFFrame extends Frame{TextField num1,num2,num3;public void launchFrame() {num1 =new TextField(10);num2 =new TextField(10);num3 =new TextField(15);//初始化Label lblPlus = new Label("+");Button btnEqual = new Button("=");//btnEqual.addActionListener(new MyMonitor(this));btnEqual.addActionListener(new MyMonitor());setLayout(new FlowLayout());add(num1);add(lblPlus);add(num2);add(btnEqual);add(num3);pack();setVisible(true);}/*內部類:隨意訪問成員變量和方法,class文件帶有美元符號是內部類*/class MyMonitor implements ActionListener{public void actionPerformed(ActionEvent e) {int n1 =Integer.parseInt(num1.getText());int n2 =Integer.parseInt(num2.getText());num3.setText(""+ (n1+n2));}}
}
/*
class MyMonitor implements ActionListener{/*TextField num1,num2,num3;public MyMonitor(TextField num1,TextField num2,TextField num3) {this.num1 = num1;this.num2 = num2;this.num3 = num3;}*//*大管家模式*//*TFFrame tfFrame =null;//持有Frame的引用public MyMonitor(TFFrame tfFrame) {this.tfFrame = tfFrame;}public void actionPerformed(ActionEvent e) {int n1 =Integer.parseInt(tfFrame.num1.getText());int n2 =Integer.parseInt(tfFrame.num2.getText());tfFrame.num3.setText(""+ (n1+n2));}
}
*/
---------------------------------------------------------------------------------------------------------------------



TestPaint.java

g就是畫筆,Graphics類

paint是重寫Container里的方法。

paint方法什么時候會被調用?縮小或擴大窗口,也就是重畫的時候。

恢復現場->Color c = g.getColor();g.setColor(c);

先調用update()->paint()。Updata()實現雙緩沖。



MouseAdapter實現MouseListener接口。

為什么要這樣?

因為MouseListener有6個方法,我們需要全部寫。

MouseAdapter實現了MouseListener接口,只不過是空的,

我們只需要重寫我們需要的MouseAdapter的某個方法。

?

事件發生時,他會把這個事件的信息包裝成一個對象(MouseEvent e)。

Point對象,AWT類中有一個點對象,封裝了x,y。

f.repaint();//對當前點的重畫,對Frame強制進行重畫。


TestWindowClose.java

TestWindowClose.java

package com.zhj.www;import java.awt.Color;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class TestWindowClose {public static void main(String[] args) {new MyFrame55("MyFrame");}
}
class MyFrame55 extends Frame{public MyFrame55(String s) {super(s);/*Frame*/setLayout(null);setBounds(300,300,400,300);this.setBackground(new Color(204, 204, 255));setVisible(true);/*添加監聽*///this.addWindowListener(new MyWindowMonitor());//匿名的內部類 new 一個WindowAdapter(父類)this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {setVisible(false);System.exit(-1);}});}/*//內部類class MyWindowMonitor extends WindowAdapter{public void windowClosing(WindowEvent e) {setVisible(false);System.exit(0);//0是正常退出,-1是非正常退出。}}*/
}


事件WindowEvent類,處理事件的接口WindowListener

匿名的內部類:但要看懂,什么時候使用匿名類?

經常修改不要使用匿名類。



package com.zhj.www;import java.awt.Frame;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;public class TestKey {public static void main(String[] args) {new KeyFrame().launchFrame();}
}
class KeyFrame extends Frame{public void launchFrame() {setSize(200, 200);setLocation(300, 300);this.addKeyListener(new MyKeyMonitor());setVisible(true);}class MyKeyMonitor extends KeyAdapter{public void keyPressed(KeyEvent e) {//System.out.println("ok");int keyCode = e.getKeyCode();if(keyCode ==KeyEvent.VK_UP) {System.out.println("up");}}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274003.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274003.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274003.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

求字符串的最長回文字串 O(n)

昨天參加了某公司的校園招聘的筆試題,做得慘不忍睹,其中就有這么一道算法設計題:求一個字符串的最長回文字串。我在ACM校隊選拔賽上遇到過這道題,當時用的后綴數組AC的,但是模板忘了沒寫出代碼來。 回頭我把這道題目再…

數據結構 二、向量(接口與實現and可擴容向量)

ADT操作實例:Disordered:顯示出3對逆序緊鄰對。Vector模板類初始有效空間為0;基于復制的構造描述區間:左閉右開 為什么*2?有限時間內不必要為擴容而打斷。 2、可擴充向量左移一位:加一倍

數據庫:mysql 獲取剛插入行id[轉]

我們在寫數據庫程序的時候,經常會需要獲取某個表中的最大序號數, 一般情況下獲取剛插入的數據的id,使用select max(id) from table 是可以的。但在多線程情況下,就不行了。 下面介紹三種方法 (1) getGeneratedKeys()方法: 程序片斷: Connection conn ; …

svn由于連接方在一段時間后沒有正確答復或連接的主機沒有反應連接嘗試失敗...

解決方法,關掉防火墻, service iptables status 查看iptables狀態 service iptables restart iptables服務重啟 service iptables stop iptables服務禁用 轉載于:https://www.cnblogs.com/jiqing9006/p/3347441.html

Android 服務(Service)

一、服務的解釋 服務(Service)是Android中實現后臺運行的解決方案,它適合那些去執行不需要和用戶交互而且還要求長期運行的任務。服務的運行不依賴任何的與任何用戶界面,即使程序被切換到后臺,或者用戶打開了另外一個應…

CenOS 配置C/C++語言

1.下載eclipseCDT組合包。 2.電腦上安裝GCC, G 3.在eclipse上創建一個C project 4. Eclipse CDT功能很強大,安裝完雖然可以編譯運行c程序,但有個問題,就是找不到c標準庫的頭文件,無法打開諸如之類的文件,編…

(數據結構)前綴,后綴以及中綴表達式

中綴表達式(中綴記法) 中綴表達式是一種通用的算術或邏輯公式表示方法,操作符以中綴形式處于操作數的中間。中綴表達式是人們常用的算術表示方法。 前綴表達式(前綴記法、波蘭式) 前綴表達式是一種沒有括號的算術表…

Moravec角點檢測算子

Moravec角點檢測算子 Moravec 在1981年提出Moravec角點檢測算子[1],并將它應用于立體匹配。 首先, 計算每個像素點的興趣值, 即以該像素點為中心, 取一個w*w(如:5x5)的方形窗口, 計算0度、45度、90度、135度四個方向灰度差的平方和, 取其中的最小值作為該像素點的興…

java習題-練習1

1、 Given the string, check if it is a palindrome.(回文) Example For inputString "aabaa", the output should becheckPalindrome(inputString) true;For inputString "abac", the output should becheckPalindrome(inputSt…

文件夾生成工具

很簡單的一個小工具,輸入一個字符串,可以為你生成相應的文件夾. 至于有什么用?我公司一個策劃拿一頓飯給我要的. 下載地址: http://pan.baidu.com/s/1d0ewl 轉載于:https://www.cnblogs.com/WhyEngine/p/3350053.html

java中System.exit(1)、System.exit(0)、以及return的區別

System.exit(0)是正常退出程序,而System.exit(1)或者說非0表示非正常退出程序System.exit(status)不管status為何值都會退出程序。 和return 相比有以下不同點:return是回到上一層,而System.exit(status)是回到最上層

(轉載)深入理解Linux中內存管理---分段與分頁簡介

首先,必須要闡述一下這篇文章的主題是Linux內存管理中的分段和分頁技術。 來回顧一下歷史,在早期的計算機中,程序是直接運行在物理內存上的。換句話說,就是程序在運行的過程中訪問的都是物理地址。如果這個系統只運行一個程序&…

eclipse解決Android Library Project jar包重復導致的問題

Android Studio部分情況下用起來還是有些不適應的地方,用eclipse熟練了,在趕項目進度的情況下還得重拾eclipse。下面是今天碰到的一個老問題。 1.在導入Android Library工程文件的時候要把library一起拷貝到workspace中 2.在導入的Android Library工程文…

java中main函數的args參數

先說一下args的作用:我們習慣將一些有用的參數傳遞給我們定義的函數,那么可曾想過有參數傳遞給main函數?args就是傳遞給main函數的一個數組參數。可是main函數作為程序(application程序)的入口點,是由系統自動調用的,怎…

算法:排序算法的比較

默認為遞增順序&#xff1b;注&#xff1a;一下例子希望自己再次復習時&#xff0c;可以用筆在紙上畫畫內存圖。 包括有: 選擇排序冒泡排序插入排序 1.選擇排序 <--------------------------------------選擇排序---------------------------------------> 1、選擇排…

LTTng 簡介使用實戰

一、LTTng簡介 LTTng: (Linux Trace Toolkit Next Generation),它是用于跟蹤 Linux 內核、應用程序以及庫的系統軟件包。LTTng 主要由內核模塊和動態鏈接庫(用于應用程序和動態鏈接庫的跟蹤)組成。它由一個會話守護進程控制,該守護進程接受來自命令行接口的命令。babeltrace 項…

黑馬程序員-------------(十)Java基礎知識加強(一)

JDK1.5新特性 目錄1.之前已經學習過的JDK1.5新特性2.靜態導入 StaticImport3.可變參數 ...4.高級for循環5.枚舉6.泛型 Generic7.注解注&#xff1a;本章全部為重點內容。###################################################################################################…

java例子:數組 數3退1

500個人圍成一個圈子&#xff0c;數夠3人&#xff0c;就退出1個&#xff0c;問最后剩下的是幾號&#xff1f;檢驗先有5個人&#xff0c;應該留下第4個人&#xff0c;由于是數組&#xff0c;所以第四個人的下標是3. /*achieve the funtion :count 3 kids, the quit the third k…

Android版CCLabelTTF在setstring時出現黑塊

首先有個前提知識&#xff0c;cocos2dx里&#xff0c;只能在ui線程&#xff08;通常也就是主線程&#xff09;中進行渲染工作&#xff08;貌似現在有一些引擎是支持多線程渲染的&#xff0c;沒有深入研究&#xff09;&#xff0c;否則大約會因為多個線程同時給GPU發指令而出現問…

java例子:九九乘法表

來吧直接上代碼&#xff1a;public class Test{public static void main(String[] args) {for(int i 1; i<9;i){for (int j 1; j < i ;j ) {System.out.print(j"x"i""j*i" ");}System.out.print("\n");}} }運行之后&#xff1…