国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Java Swing中的鍵盤事件處理

2019-11-18 11:33:04
字體:
供稿:網(wǎng)友

  在java Swing編程過程中,經(jīng)常需要處理鍵盤事件,例如處理快捷鍵等。這里就介紹如何定義鍵盤事件,以及如何處理這些事件。

  在jdk1.2中,分別針對Jcomponent和Text類的對象定制了不同的處理鍵盤事件的方法:在Jcomponent中,定義了registerKeyboardAction方法,使用這個方法來將需要處理的鍵盤事件以及處理事件的行為綁定在一起。Text類中具有keymap對象,同Jcomponent中的處理方法類似,這個對象保存著需要處理的鍵盤事件和對應的行為。

  而在jdk1.3中,使用一種新的方法來處理鍵盤事件,它將jdk1.2的兩種方法整合在一起。不需要區(qū)分被處理的是Jcomponent還是Text類型的組件。它定義了兩個新的類:InputMap和ActionMap。他們均是簡單的表或映射。一個InputMap將一個Keystroke對應到一個對象,ActionMap將一個對象對應到一個行為(Action)。通常InputMap中KeyStroke所對應的對象是一個字符串,通過這個字符串可以在ActionMap中查找到相應的行為。

  InputMap和ActionMap中均有put方法。InputMap的put方法可以將Keystroke對應到一個對象,而ActionMap的put方法可以將一個對象對應到一個行為。

  在每一個Jcomponent組件中,會有三個缺省的InputMap和一個缺省的ActionMap。他們可以通過調(diào)用getInputMap(int condition)和getActionMap()得到。三個InputMap分別是當組件本身擁有焦點時的InputMap(WHEN_FOCUSED),當組件的祖先擁有焦點時的InputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)和組件所在的窗體具有焦點時的InputMap(WHEN_IN_FOCUSED_WINDOW)(括號內(nèi)表示為了得到這些InputMap,應該在getInputMap中設置的參數(shù))。以下分別說明這三種InputMap:

  1, 組件本身擁有焦點時的InputMap:當組件擁有焦點時,鍵盤按鍵按下,則java在這個InputMap中查找鍵盤事件所對應的KeyStroke對象。

  2, 組件的祖先擁有焦點時的InputMap:當組件的祖先擁有焦點時,鍵盤按鍵按下,則java查找這個InputMap。

  3, 組件所在的窗口擁有焦點時的InputMap:當組件所在的窗口具有焦點時,鍵盤按鍵按下,則java查找這個InputMap。

  當一個鍵被按下,這個事件被轉(zhuǎn)化成一個KeyStroke對象,java會查找這個Jcomponent的相應InputMap(例如,當組件的祖先具有焦點時,java就查找這個Jcomponent的祖先擁有焦點的InputMap)中是否有這個KeyStroke,假如有,取出它所對應的對象(通常是字符串),利用這個對象在這個Jcomponent的ActionMap中查找,假如找到對應的行為(Action),則java執(zhí)行這個行為的actionPerformed方法(隨后介紹這個方法)。從而達到處理鍵盤事件的目的。

  每一個InputMap可以具有parent屬性,這個屬性的值是一個InputMap。當在一個InputMap中查找不到鍵盤事件的KeyStroke時,java會自動在它的parent屬性指定的InputMap中查找,依次向上查找,直至找到。使用parent的好處是:當有一些固定的,不希望用戶進行改動的鍵盤映射可以存放在parent屬性所指定的InputMap中,從而避免被意外修改;另外可以將多個Jcomponent的缺省InputMap設置具有相同的parent,使得可以共享一些鍵盤綁定的設置。可以通過InputMap類的setparent()方法設置它的parent屬性。ActionMap也具有相同的parent屬性,使用方法也相同。

  以上是如何將一個鍵盤事件對應到一個行為,以下就簡單介紹行為(Action)。


  行為是一個實現(xiàn)了Action接口的類。在Action接口中定義了7個方法。其中最要害的是actionPerformed()方法。這個方法描述了這個行為的具體操作過程。其他幾個方法包括setEnabled,isEnabled,putValue,getValue,addPRopertyChangeListener,和removePropertyChangeListener方法。他們分別用來設置行為是否可用、判定行為可用的狀態(tài)、設置和取得行為的一些屬性,最后兩個方法用來答應其他對象在行動對象的屬性發(fā)生變化后得到通知。

  通常我們使用一個實現(xiàn)了Action接口的大部分方法的抽象類AbstractAction類作為基類,重載actionPerformed方法以實現(xiàn)我們的行為。

  我們用一個例子來具體說明如何進行實際的操作。

  首先編寫一個具體的行為,對指定的鍵盤事件進行處理:

public class TextAction extends AbstractAction
{
 private String a;
 public TextAction(String a)
 { this.a = a; }
  public void actionPerformed(ActionEvent parm1)
  {
   String b = parm1.getActionCommand(); //得到行為的命令字符串
   System.out.println("command="+b);
   System.out.println("prompt="+this.a);
  }
 }
  建立四個TextAction對象:

TextAction whenFocusSon = new TextAction("focus son");
TextAction whenFocusFather = new TextAction("focus father");
TextAction window = new TextAction("window");
TextAction ancestor = new TextAction("ancestor");
  隨后,在一個窗體中加入兩個面板,名為sonPanel和parentPanel,使得parentPanel是sonPanel的祖先。并在sonPanel中加入一個名為son的button,在parentPanel中加入名為parent的button。在fatherPanel外加入幾個button。

  得到son組件的三個InputMap,并創(chuàng)建一個名為focusFatherIm的InputMap,使得這個InputMap成為focusIm的parent:



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 房山区| 额尔古纳市| 疏附县| 西吉县| 东乡族自治县| 郧西县| 抚顺市| 辽阳市| 定结县| 三河市| 新化县| 柳州市| 青冈县| 平邑县| 内黄县| 邵阳市| 鄄城县| 元谋县| 成都市| 乌审旗| 寻甸| 呈贡县| 濮阳县| 泾川县| 龙口市| 建瓯市| 鹿邑县| 商南县| 通榆县| 绥棱县| 河曲县| 信阳市| 佛山市| 双牌县| 桦南县| 柞水县| 西盟| 高雄县| 庐江县| 湟源县| 南部县|