swing學習 MVC體系理解

2021-08-30 17:06:50 字數 1480 閱讀 6469

mvc在顯示中採用架構是從smalltalk開始的,mvc體現的是一種將資料,展示和控制分離的模式,這種是一種優秀的模式,包括當前的web介面的開發也採用了這種模式,成為了一種非常普遍的模式。swing使用的是乙個變體的mvc架構。

swing gui元件採用了mvc模式,包括至少三個物件:乙個component,乙個model和乙個ui delegate,model負責儲存資料,ui delegate負責從model獲取資料並渲染到螢幕上去,component通常協調model和delegate之間的操作,並同時負責將 swing嵌入到awt視窗系統中。

對於比較複雜的物件,比如jtable,jlist等可能存在成千上萬資料的物件,單純但用這種模式也不方便進行資料的處理,為了處理這種情況,swing引入了渲染器的概念,他是物件乙個不可見的,用來復用的物件 。按照正常的顯示邏輯,對於jtable的每乙個單元格的物件我們會例項化乙個物件例項,然後進行展現,這樣造成物件的**,記憶體會大量被占用。採用了渲染器模式以後,在物件中存在乙個公用的展現的物件,在使用的時候會從資料model中讀取資料,然後採用這乙個渲染器進行顯示渲染,等渲染完成以後,仍然使用這個渲染器渲染下乙個資料,這樣大大降低了物件的數量,當然也節約了空間。下面乙個簡單的basictableui中的**作為例項

//這部分主要是用來渲染單元格,直接採用取得渲染器

tablecolumn tablecolumn = getcolumnmodel().getcolumn(column);

tablecellrenderer renderer = tablecolumn.getcellrenderer();

//列中的渲染器直接由外界傳遞進來的。

除了渲染器還有乙個需要主要提高效率的地方,請分析下面的二段**,應該寫哪乙個

**一:

jcombobox box =newjcombobox();   

for(inti = 0

; i < numitems; i++)  

**二:

vector v =newvector(numitems);for(inti = 0

; i < numitems; i++)     comboboxmodel model =newdefaultcomboboxmodel(v);    jcombobox box =newjcombobox(model); 

我渲染的當然是方法二了。第一段**非常清晰,就是給下拉列表新增資料,按照正常的api進行,這樣如果資料量不大,沒有問題,需要考慮了,時間會很長,因為他每次新增乙個就會提示變化事件,進行一次顯示邏輯,非常的浪費資源。第二種模式將資料全部補充好了,一次性的進行提醒,節約了處理的時間,也是非常好的提高效率的方式。

編寫swing程式,需要從cpu和記憶體二個方面對於程式進行優化。

swing 個人理解記錄

jframe jlabel jpanel,jframe 創造視窗,但視窗一開始是不可見的,要通過setvisible true 設定為可見,向視窗上新增元件 一開始不將布局設為null的話,只能顯示乙個元件,通過add新增元件,setbounds定義元件位置,有乙個 將視窗居中的方法,setloca...

mvc模式再Swing中的應用

將乙個swing得頁面作為view,將資料處理成model,再使用乙個controller控制他們得邏輯。進一步深入得話,可以引入監聽方法,將每乙個view,作為乙個listener,實現乙個listener介面,再controller中加入listener event得註冊方法,再detector...

MVC 理解學習Func用法

func用法 public static class funcdemo 返回int型別的集合 list usages uslist.select new funcint delegate user u tolist 輸出結果 usages.foreach u 上面的縮寫lambad表示式沒有指定資料...