Swing框架之Model之二

2021-08-29 14:58:54 字數 2651 閱讀 5294

輕量級通知

下面swing中的模型使用輕量級通知,它們是基於 changelistener、changeevent介面的:

model

listener

event

boundedrangemodel

changelistener

changeevent

buttonmodel

changelistener

changeevent

singleselectionmodel

changelistener

changeevent

changelistener介面只有乙個通用方法:

public void statechanged(changeevent e)

changeevent中僅有的狀態是事件源,因為所有通知中

的事件源

都是相同的,單獨乙個事件例項可以用作所有來自該模型的通知。使用此機制的模型支援下面的方法來新增和刪除changelisteners:

public void addchangelistener(changelistenerl)

public voidremovechangelistener(changelistenerl)

獲知jslider資料發生變化的**可以使用如下**實現:

jslider slider = new jslider();

boundedrangemodelmodel =slider.getmodel();           

model.addchangelistener(new changelistener()

});

為給不想和分離式模型互動的程式提供方便,一些swing元件類提供了直接在元件上註冊changelistener的方法(元件可在元件內部偵聽模型的 資料變化,並將事件傳播給任何註冊在元件上的listener),這些通知的唯一區別是,使用模型註冊方式的事件源是該模型例項,而使用元件註冊方式的事 件源是該元件。

因此我們可以將前面的例子簡化成:

jslider slider = newjslider();

slider.addchangelistener(new changelistener()

});

狀態化通知

支援狀態化通知的模型根據它們的目的提供不同的listener介面和事件物件。下表是這些模型介面和事件物件的類:

model

listener

event

listmodel

listdatalistener

listdataevent

listselectionmodel

listselectionlistener

listselectionevent

comboboxmodel

listdatalistener

listdataevent

treemodel

treemodellistener

treemodelevent

treeselectionmodel

treeselectionlistener

treeselectionevent

tablemodel

tablemodellistener

tablemodelevent

tablecolumnmodel

tablecolumnmodellistener

tablecolumnmodelevent

document

documentlistener

documentevent

document

undoableeditlistener

undoableeditevent

listener

除了 可以直接查詢事件物件來跟蹤內容

改變 外,這些api的作用與輕量級通知相似。比如下面的**動態的跟蹤jlist被選中的項:

stringitems =

}});

自動檢視更新

模型沒有任何表現它檢視的固有知識,相反模型只有關心其狀態改變的listener列表,這種需求對於同個模型多個檢視的框架來說是至關重要的。 swing元件負責將合適的模型listener連線起來,以便於模型改變時能正確地重畫出自己。如果你發現模型改變時,元件不能自動更新,說明元件的實 現就存在錯誤。

忽略模型

正如前面提到的,大多數元件直接在component類中提供模型定義的api,以方便元件能不用和模型互動就直接操作,這是相當可行的程式設計方法,尤其是對於gui狀態模型來說。比如下面的jslider內部getvalue的實現,它將呼叫**給模型:

public int getvalue()

因此程式完全可以這樣寫:

jslider slider = new jslider();

int value=slider.getvalue();

swing模型總結

雖然理解了swing模型設計是如何工作的,但沒有必要在所有swing程式設計中都使用模型api。你需要注意考慮應用程式各自的需求,決定哪兒使用模型api能幫你提公升**,且不帶來不必要的複雜性。

我特別推薦在swing中使用應用資料模型(如jtable和jtree等的模型),因為從長期來看,它們能極大地提高你的應用程式可擴充套件性和模組化度。

Cairngorm 之 二 框架搭建

二 框架搭建 需要建立的包名,以及此包總內容的用途。包名 包內放置類功能 business 與後台通訊 類。commands 命令類,一種事件對應乙個命令類。對事件發生的處理 一般呼叫後台 類的方法 和此事件呼叫後台結果的處理。control 前台控制器類,新增事件監聽,純邏輯處理。control....

Tornado框架知識系列之二

import tornado.web import tornado.ioloop import tornado.httpserver 新引入httpserver模組 class indexhandler tornado.web.requesthandler 主路由處理類 defget self 對應...

javaWeb struts2框架之二解釋

在前一章,搭建了乙個簡單的struts2例項。本章講述一些在開發中常用的實際技術 1.獲取servletapi技術 獲取servletapi技術有兩種方法,一種是直接呼叫action來獲取,另一種是通過注入的方法。常用的就是一種方法 同樣我們上 來分析 system.out.println 增加使用...