亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java 2 新的焦點子系統

2019-11-18 11:45:13
字體:
來源:轉載
供稿:網友

  最新的 java 標準版,1.4 發行版中,Java 2 平臺有了個全新的 AWT 焦點子系統,我們對此進行了獨家報導。Java 語言工程師 Bertrand Portier 對新的類和方法進行了初步研究(包括基本的 KeyboardFocusManager),這些類和方法中包含該 AWT 焦點子系統。他還提供了遷移到新的 API 時調整編程工作的技巧,一個能工作代碼樣本示例及其它更多內容。請在討論論壇與作者和其它讀者分享您關于本文的想法。
  
  Java 2 標準版,1.4(也稱 Merlin)引入許多人們期待已久并為之雀躍的對 Java 平臺的更改。其中一個就是對 AWT 焦點治理子系統的更改。這個 AWT 焦點子系統的新實現與舊的完全不同。實際上,許多代碼都被完全重新編寫過了,這樣做在某些情況下是以犧牲向下兼容為代價的。我們認為這些措施是必需的,原因在于舊的 AWT 焦點子系統不完善。
  
  
  
  改進了的焦點模型的中心是新的 KeyboardFocusManager 類,它由幾個增加的 Swing 類和 AWT 類支持。本文的絕大部分用于讓我們學習這些更改,并討論它們會如何影響您的 Java 編程工作。在本文的結束部分,我將提供一些技巧和一個親身實踐的示例來幫助您將當前的應用程序和新的 API 相集成。
  
  
  
  請注重,本文假定您了解與 AWT 焦點子系統以前的實現相關的使用和術語。
  
  
  
  KeyboardFocusManager 簡介
  
  KeyboardFocusManager 類用于治理與新的 AWT 焦點子系統的焦點相關的任務。它負責活動的和已定焦的窗口以及當前的焦點所有者。它的任務是讓客戶機代碼可以啟動焦點的更改并調度與焦點相關的所有事件。
  
  
  
  KeyboardFocusManager 給 AWT 焦點子系統帶來許多新功能。其中的一些功能如下:
  
  
  
  用 Shift-Tab 將焦點轉到 tab 組的前一個組件
  
  跟蹤由鼠標引起的焦點遍歷行為。
  
  確定當前的焦點所有者。
  
  KeyboardFocusManager 有四個字段:
  
  
  
  FORWARD_TRAVERSAL_KEYS:通常是 Tab(或 Ctrl-Tab)鍵
  
  BACKWARD_TRAVERSAL_KEYS:通常是 Shift+Tab(或 Ctrl-Shift-Tab)
  
  UP_CYCLE_TRAVERSAL_KEYS:無缺省值
  
  DOWN_CYCLE_TRAVERSAL_KEYS:無缺省值
  
  我們將在下面幾節中討論其中的一些字段。
  
  
  
  KeyboardFocusManager 是個抽象類,我們能夠用它全局的請求焦點信息。例如,KeyboardFocusManager.getFocusOwner() 返回當前的焦點所有者。DefaultKeyboardFocusManager 類對 AWT 應用程序是作為缺省提供的。您當然可以選用自己的 KeyboardFocusManager 類來替代該焦點模型。但是,倘若本機的焦點策略復雜的話,建議您還是建立 KeyboardFocusManager 或 DefaultKeyboardFocusManager 的子類吧。
  
  
  
  AWT 焦點子系統的總體改進
  
  AWT 焦點子系統的前一個發行版因其輕量級的或重量級的組件類型和擁有 Java 虛擬機平臺的不一致行為而受挫。因為重量級的組件實施使用一個獨立的本機窗口(AWT 組件),對于本機焦點系統它們是可信賴的。輕量級的(基于 Swing 的)組件在不同平臺上的外觀和感覺都相同。KeyboardFocusManager 解決了這種不一致,確保了輕量級和重量級組件所有和焦點相關的動作和查詢都成為可能。
  
  
  
  確定當前的焦點所有者和焦點窗口
  
  當前的焦點所有者是新的 AWT 焦點模型中的一個要害元素。所有遍歷操作都從當前的焦點所有者或從另一個被虛擬的認作焦點所有者的組件開始。每個給定時間只能有一個當前的焦點所有者。當前的焦點所有者是個已收到 FOCUS_GAINED 事件 — 但還未收到 FOCUS_LOST 事件的組件(有關這些事件的更多信息,請參閱下面的內容)。
  
  
  
  您使用 KeyboardFocusManager.getFocusOwner() 來確定當前的焦點所有者。假如該焦點所有者未和調用線程處于同一個上下文中,那么該方法會返回空。因此,您應該在代碼中使用 KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()。這樣,只有當焦點被設置成“無組件(no component)”時才會返回空。此外,該 Component 類提供了 isFocusOwner() 方法,假如該組件是焦點所有者,那么這個方法就返回真。
  
  
  
  同樣,擁有焦點的窗口就是包含當前的焦點所有者的窗口。KeyboardFocusManager.getFocusedWindow() 返回的擁有焦點的窗口和調用線程處在相同的上下文中。再說一遍,您應該使用 KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow() 來確保該擁有焦點的窗口和調用線程處在相同的上下文中。
  
  
  
  確定焦點更改中的對立組件
  
  一些窗口和組件的焦點事件含有相應的對立事件。這樣的事件集有:
  
  
  
  FOCUS_LOST 和 FOCUS_GAINED
  
  WINDOW_ACTIVATED 和 WINDOW_DEACTIVATED
  
  WINDOW_LOST_FOCUS 和 WINDOW_GET_FOCUS
  
  當調遣其中的一個事件時,總是同時調遣了這個事件的對立事件。焦點更改的對立組件只是個獲取對立事件的組件。例如,當一個組件獲得了焦點時,其對立組件就是那個失去該焦點的組件。
  
  
  
  FocusEvent.getOppositeComponent() 方法和 WindowEvent.getOppositeWindow() 方法返回焦點更改所涉及的對立組件或窗口。 上面列出的六個焦點事件和這兩個方法密切相關。當一個窗口得到一個 WINDOW_DEACTIVATED 事件時,getOppositeWindow() 方法查找獲取 WINDOW_ACTIVATED 事件的窗口。假如其對立組件或窗口處于一個不同的上下文,這些方法中每一個都會返回空。
  
  
  
  通過編程來實現焦點遍歷
  
  正如 AWT 焦點子系統規范中所定義的,一個焦點遍歷循環是一組被定義過的組件,組中的每個組件(組外沒有組件)會在前序或后序焦點遍歷中被遍歷到。
  
  
  
  焦點遍歷循環中每個組件都有自己的上一個組件和下一個組件。KeyboardFocusManager 類提供了在給定的遍歷循環中傳遞焦點,或者甚至更改焦點遍歷循環的方法。
  
  
  
  focusNextComponent() 在遍歷循環中把焦點傳遞給下一個組件。該方法可以把另一個組件作為它的參數,然后把焦點傳遞給焦點遍歷循環中緊接著的那個組件。 focusPReviousComponent() 對于遍歷循環中前一個組件的處理與之類似。
  
  
  
  Container 一般既起到一個焦點遍歷循環的成員的作用,也起到另一個焦點遍歷循環的根的作用。這讓我們理解了焦點遍歷層次結構的概念,從而明白了向上和向下的焦點循環的概念。 upFocusCycle() 把焦點從當前的焦點所有者向上移動一個焦點遍歷循環。它可以把一個組件作為它的參數,從而把焦點向上移動一個遍歷循環到該組件的遍歷循環。 downFocusCycle() 的處理方法相同,但只在組件是焦點遍歷循環的根的情況下使用。
  
  
  
  在下面的代碼樣本中,您可以看到一個框架包含了兩個組件;調用這兩個組件其中之一的 upFocusCycle() 會使框架獲得焦點。請注重,假如沒有可以定焦的其他組件,焦點所有者就不會改變。
  
  
  
  通過調用 KeyboardFocusManager.clearGlobalFocusOwner(),您可以把焦點所有者設置成“無組件(no component)”。這導致了當前的焦點所有者的 FOCUS_LOST 事件。直到用戶交互或代碼明確地設置了焦點所有權為非凡的組件,才丟棄所有的鍵事件。這不僅對 Java 組件是有效的,對本機級別的組件也有效。
  
  
  
  Componet 類、Container 類和 Windows 類中的新方法
  
  在 Merlin 的 Component 和 Container 類中,已經添加了新的與焦點相關的方法。您可以把他們作為 KeyboardFocusManager 方法的備用方法使用它們,從而設置或獲取這些類的實例的焦點屬性。例如, Component.isFocusable() 傳達了組件是否可以定焦。所有組件缺省的返回值都為真,因為所有組件在缺省情況下都是可定焦的。這不同于前幾個發行版 — 輕量級組件缺省情況下不可定焦。Component.setFocusable(boolean) 設置組件是否可定焦。
  
  
  
  setFocusable(false) 會導致隨后調用 requestFocus() 和 requestFocusInWindow() 的失敗。請注重,Component 類和 Container 類的一些方法和 KeyboardFocusManager 中的一些方法有相同的功能并且是等價的。例如,Component.setFocusTraversalKeys() 可以用來覆蓋一個應用程序中特定組件的遍歷鍵,該應用程序有它自己的策略和由 KeyboardFocusManager.setDefaultFocusTraversalKeys() 定義的焦點遍歷鍵集。
  
  
  
  Window.setFocusableWindow(boolean) 答應您通過程序來防止窗口或它的任何子組件成為焦點所有者。所有窗口在缺省情況下都是可定焦的,但在特定情況下需要把窗口設置成不可定焦。一個明顯的示例是輸入法合成窗口。輸入法用來輸入不能由標準 102 鍵鍵盤完全插入的文本字符。很明顯,您希望焦點遍歷循環不包括輸入法合成窗口(如下所示),因此使用 Window.setFocusableWindow(false)。
  
  
  
  圖 1. Turbolinux 中文輸入法合成窗口的屏幕截圖
  [[The No.2 Picture.]]
  新的遍歷策略類
  
  FocusTraversalPolicy 類定義了組件遍歷的順序。該類應該提供不同的方法分別確定前一個、后一個、第一個、最后一個組件及缺省組件。它負責調遣要害事件、焦點事件和焦點相關的窗口事件。 Java.awt.FocusTraversalPolicy 是所有遍歷策略類的抽象類。它有下列

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产日韩欧美在线动漫| 一区二区三区久久精品| 国产精品中文字幕久久久| 欧美www视频在线观看| 爽爽爽爽爽爽爽成人免费观看| 日韩中文字幕精品视频| 午夜伦理精品一区| 一区三区二区视频| 日韩欧美中文免费| 欧美日韩在线视频观看| 亚洲成av人乱码色午夜| 高清一区二区三区四区五区| 91午夜在线播放| 亚洲国产精品va在看黑人| 大荫蒂欧美视频另类xxxx| 亚洲欧美日韩精品久久奇米色影视| 亚洲国产私拍精品国模在线观看| 国产亚洲日本欧美韩国| 欧美富婆性猛交| 国产精品久久久久福利| 欧美三级欧美成人高清www| 2018中文字幕一区二区三区| 韩剧1988在线观看免费完整版| 成人国内精品久久久久一区| 亚洲天堂精品在线| 庆余年2免费日韩剧观看大牛| 日韩国产欧美区| 久久久久久噜噜噜久久久精品| 久久久久久久久久久久av| 亚洲va国产va天堂va久久| 国产欧美精品一区二区三区介绍| 国产午夜精品美女视频明星a级| 国语自产精品视频在线看一大j8| 国产成人精彩在线视频九色| 欧美一区二区.| 成人国产精品久久久久久亚洲| 亚洲第一偷拍网| 91国产在线精品| 97视频在线观看亚洲| 97精品在线视频| 伦伦影院午夜日韩欧美限制| 欧美午夜片欧美片在线观看| 欧美日韩激情美女| 久久久久成人精品| 久久久91精品国产一区不卡| 国产成人精品av在线| 九九久久精品一区| 国产午夜精品全部视频播放| 亚洲最大的成人网| 欧美日韩福利视频| 久久伊人91精品综合网站| 日韩在线观看免费全| 欧美激情免费观看| 国产精品女主播视频| 亚洲国产日韩一区| 亚洲性夜色噜噜噜7777| 国产精品扒开腿做爽爽爽的视频| 色综合导航网站| 国产亚洲一区二区在线| 欧美一级淫片aaaaaaa视频| 亚洲国产成人爱av在线播放| 成人午夜黄色影院| 国内精品在线一区| 欧美日韩免费观看中文| 午夜精品视频网站| 欧美中文在线观看国产| 国产精品美乳一区二区免费| 久久久免费观看| 日韩在线观看你懂的| 欧美激情伊人电影| 成人激情视频在线播放| 亚洲一区二区三区四区在线播放| 国产激情综合五月久久| 91精品视频一区| 亚洲欧美日韩成人| 国产精品福利片| 亚洲国产小视频在线观看| 亚州欧美日韩中文视频| 国产成人拍精品视频午夜网站| 日韩一区二区三区在线播放| 亚洲系列中文字幕| 久久久成人的性感天堂| 欧美性高潮在线| 欧美成人免费播放| 久久国产精品久久久久久久久久| 久久av红桃一区二区小说| 国产精品嫩草影院一区二区| 午夜剧场成人观在线视频免费观看| 国内精品久久影院| 久久久国产一区二区三区| 欧美性猛交xxxx免费看漫画| 亚洲精品国产精品国产自| 欧美性感美女h网站在线观看免费| 日韩a**中文字幕| 国产精品扒开腿做爽爽爽的视频| 亚洲综合在线做性| 日韩中文视频免费在线观看| 成人性教育视频在线观看| 国产91在线视频| 久久躁日日躁aaaaxxxx| 亚洲乱码av中文一区二区| 92看片淫黄大片欧美看国产片| 欧美日韩国产丝袜另类| 成人在线国产精品| 97在线视频观看| 青青久久aⅴ北条麻妃| 亚洲影视中文字幕| 黄色一区二区在线观看| 国产精品男女猛烈高潮激情| 亚洲天天在线日亚洲洲精| 日韩一区二区在线视频| 欧美午夜精品在线| 国产日韩亚洲欧美| 久久五月情影视| 青草热久免费精品视频| 欧美色视频日本版| 欧美成人精品一区二区三区| 国产精品日日做人人爱| 日韩在线观看免费网站| 91精品国产91久久久久福利| 日韩av手机在线观看| 亚洲欧美综合区自拍另类| 国产aⅴ夜夜欢一区二区三区| 91九色国产在线| 777国产偷窥盗摄精品视频| 浅井舞香一区二区| 国产精品69久久| 亚洲影院污污.| 国产噜噜噜噜噜久久久久久久久| 国产精品影片在线观看| 国产精品久久色| 国产成人拍精品视频午夜网站| 亚洲欧美日韩一区二区三区在线| 亚洲国产精品女人久久久| 国产精品久久久久久久久| 欧美放荡办公室videos4k| 国产免费一区二区三区在线能观看| 国产精品男女猛烈高潮激情| 综合久久五月天| 欧美激情精品久久久久| 欧美性受xxxx白人性爽| 欧美在线亚洲一区| 九九精品在线视频| 亚洲加勒比久久88色综合| 成人免费自拍视频| 夜夜嗨av色综合久久久综合网| 欧美日韩精品在线观看| 91欧美精品午夜性色福利在线| 久久久精品免费视频| 国产亚洲xxx| 亚洲电影免费观看高清完整版在线| 日韩成人激情在线| 91久久综合亚洲鲁鲁五月天| 自拍偷拍亚洲一区| 国产精品一二三在线| 日韩有码片在线观看| 这里只有视频精品| 亚洲精品乱码久久久久久按摩观| 日韩精品极品在线观看| 国产精品6699| 久久精品一区中文字幕| 国产精品国产自产拍高清av水多| 亚洲高清一区二| 久久久久久高潮国产精品视|