中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Swing模型和渲染器的示例分析

發布時間:2021-12-28 09:20:42 來源:億速云 閱讀:263 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關Swing模型和渲染器的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

Swing模型和渲染器

在這些更為復雜的Swing組件中,渲染器是提供可擴展性的關鍵。我們以JTable作為渲染器的示例。缺省表格中的每一格可能都有一個JLabel,這對于比較小的數據集來說可行,但是對于大數據集就行不通。比如,如果使用這種表格顯示1000x1000的數據集,需要的內存可能要1G,即使每個格子都是空的。

如果解決這種擴展性問題?Swing的JTable使用一個組件來畫出所有相同類型的格子。比如所有的String對象的格子都使用相同的組件畫。這種類型的組件被稱作渲染器(renderer),使用渲染器顯示多個表格極大的減小了大型數據表存儲空間。

當渲染器用來顯示表格時,JTable從model中獲取格子中的數據,然后使用這些數據對渲染器進行配置,然后使用該渲染器畫出該格子。接下來,渲染器繼續移動到下一個格子,然后重復這個過程。

注意你可以通過操作Swing模型和渲染器來控制這個過程,所有的矢量組件,包括JTree、JList以及JComboBox都使用渲染器方法,并不僅限于JTable。

模型(Model)

直接操作Swing的模型(Model)對于編寫可擴展的用戶界面至關重要,下面代碼是往JComboBox添加數據項的通常做法:

這些代碼只是簡單的往JComboBox中添加數據項,代碼同往AWT的Choice中添加選項類似,這種方法對于小數據量來說可以,但是當要添加大量數據時就會明顯變得非常慢。

盡管上面的代碼沒有明確引用任何模型,JComboBox的模型對象實際上參與這個過程,每次調用addItem時,JComboBox內部發生了許多操作:組件將請求傳遞給JComboBox的模型,模型發送一個事件表明一個新項被添加。很明顯,如果你直接操作模型的將會更高效,如下例所示:

這樣為什么會更快呢?原因有兩個。***,因為所有項是一次添加到模型去,而不是一個一個的,只有一個事件發出,這意味著更少的事件觸發,更少的方法調用。第二是因為需要通知變化的對象更少,總的工作量等于觸發次數乘以偵聽器數目。因為模型是新創建的,偵聽在上面的偵聽器為零,這意味著沒有觸發事件發生。

從上面的例子可以學到兩點:

盡可能使用批操作,盡量減少觸發事件的數量。

當初始化或者需要完全替換模型的內容時,考慮重新生成模型,不要使用已經存在的模型,已存在模型上已經保持了很多的偵聽器,新生成的模型沒有偵聽器,這樣避免了不必要的處理函數的調用。

觸發事件數量嚴重影響你的程序啟動時間,也會影響打開對話框和相似操作的時間。

關于“Swing模型和渲染器的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

慈利县| 锡林郭勒盟| 沧源| 长葛市| 梅州市| 子长县| 怀来县| 中宁县| 靖远县| 平度市| 娄烦县| 博客| 乐安县| 浦城县| 平利县| 于都县| 隆子县| 凌源市| 南木林县| 元氏县| 都昌县| 郸城县| 梓潼县| 广西| 克拉玛依市| 安陆市| 青神县| 瓦房店市| 盖州市| 洪泽县| 定襄县| 萝北县| 陈巴尔虎旗| 滨海县| 朔州市| 腾冲县| 芜湖市| 阿合奇县| 克拉玛依市| 天全县| 新余市|