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

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

Swing 第三方工具設計

2019-11-18 11:53:43
字體:
來源:轉載
供稿:網友

    Swing是java為桌面開發而設計一個重要GUI工具包,整個設計是基于AWT技術上的擴展。加上Java在網絡的優勢和跨平臺的特點,Swing已經無處不在,在Java2D的性能加強,可插入式的Look And Feel,主題(Theme)和JDK5.0"Tiger"的出現后,基于Swing的技術框架如雨后春筍誕生,像Infonode,JGoooodes都是很優秀的框架。

    很多用Swing開發的人員在設計GUI程序的時候,都遇上代碼量大和代碼邏輯復雜的問題,加上Swing的設計理論門檻相對比較高,令桌面程序的開發在國內不能流行,分析其技術原因如下:

    1.Swing是MVC架構的體系,一般和用戶界面相關的程序,必定觸發控制器(Controler),然后在模型(Model)層相應處理,這是一般最普遍的處理,也可以說,因為Swing的V和C聯系得太緊密,所以一般程序員處理數據和UI事件都以Model為入口。

    2.Model要響應事件,開發人員就必須集成相應UI控件的Model,并在捕捉事件的方法里寫入相應處理的代碼。

    基于以上的原因和界面開發的需求是千變萬化的,導致模型(Model)代碼量大,并且復用性低,可調試性低等問題。所以在一些UI功能添加上,對一般的桌面程序員來說可謂"百上加斤".到底我們能不能添加一些基本功能,又不影響二次開發用戶的易擴展性呢?

    本文旨在從以上問題出發,利用自己的實際的工作經驗,從本人的Swing2CN開源項目中取出部分源代碼做例子,希望點燃更多的聰明的火花。

    設計一個工具能讓所有用的開發人員輕易擴展其控件,甚至不用添加額外的代碼或者改變其設計的數據模式,是最完美的結果。到底怎么實現呢?答案是,接口。從標準的Swing控件的Model接口中的方法設計關于GUI交互的功能和改變,是不會影響二次開發人員的原有設計模式和代碼。以下是我的設計思想。其中的圓圈O指的便是Model里面的接口方法。

Swing 第三方工具設計(圖一)

現在就以這種思想去設計一個功能類,我們就以JTable實現列排序的功能為例子.首先,我們從TableModel知道JTable的Model基本的方法有:

addTableModelListener(TableModelListener l)getColumnClass(int columnIndex)getColumnCount()getColumnName(int columnIndex)getRowCount()getValueAt(int rowIndex, int columnIndex)isCellEditable(int rowIndex, int columnIndex)removeTableModelListener(TableModelListener l)setValueAt(Object aValue, int rowIndex, int columnIndex)      

排序方法主要還是用到和數據相關的方法為主,并且涉及以下技術點:

  1. TableHeader,因為觸發排序事件的UI是列的UI代表,其UI代表通過一個類來實現排序圖標的繪畫,本人傾向于用代碼繪畫圖形,這樣有機性會比圖片要高.
  2. Comparable接口,用該接口來處理排序的算法和邏輯.

代碼運行設計:
讓UI觸發排序事件,然后通知工具類,工具類通過Model接口方法處理完排序,然后再更新UI代表.這就算完成了一次排序事件.

工具類結構設計:
SortManager類構造函數就把JTable的引用帶進去,這樣,用戶只需要生成一個SortManager對應一個JTable實例就可以添加排序功能.SortManager還提供兩個帶參數的構造函數,讓用戶能夠指定哪幾列或者哪一列需要排序功能.

結論


 

我寫了一個測試類來顯示這個工具類的效果,開發人員只需要一行代碼就可以在無損害已經有的JTable結構下添加排序的功能,相當便利,能減少開發時間和代碼量.但這個工具在極端的情況下是不適宜使用,(譬如TableHeader被指定時).所以,無絕對的通用,只有相對的通用.

測試的代碼和效果如下:

package org.swing2cn.test;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.*;import org.swing2cn.table.*;public class TestSortTable extends JPanel {    public TestSortTable() {        init();    }    PRivate void init() {        setLayout(new BorderLayout());        JTable table = new JTable();        Object[][] obj=new Object[][]{{"asdas","12321","3as3","eqw22"},        {"das2","asd","qweqw","as23"},{"aere","r32re","ewfse","werew3"}};        DefaultTableModel model=new DefaultTableModel(obj,new Object[]{"a","b","c","d"});        table.setModel(model);        new KeyPlugin(table);        JScrollPane scrPane = new JScrollPane(table);        JButton addBTn = new JButton("新增行");        addBtn.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {            }        });        JPanel btnPane = new JPanel();        btnPane.add(addBtn);        add(scrPane);        add("South", btnPane);    }    public static void main(String[] args) {        JFrame frame = new JFrame("Test");        frame.setDefaultCloSEOperation(frame.EXIT_ON_CLOSE);        frame.getContentPane().add(new TestSortTable());        frame.pack();        frame.setVisible(true);    }}      

結論




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美亚洲第一页| 欧美大片在线看免费观看| 国产精品爽爽ⅴa在线观看| 亚洲xxx视频| 国产精品一区二区久久久| 亚洲精品成a人在线观看| 中文字幕精品在线| 中文字幕亚洲情99在线| 日韩美女福利视频| 中文字幕久久久av一区| 亚洲欧美精品伊人久久| 国产欧美一区二区三区四区| 欧美亚洲成人精品| 中文字幕无线精品亚洲乱码一区| 久久久久久国产| 久久久久国产精品免费网站| 成人免费淫片视频软件| 欧美xxxx做受欧美| 国产精品美女呻吟| 这里只有精品视频在线| 国产综合久久久久久| 黑人巨大精品欧美一区二区免费| 亚洲国产私拍精品国模在线观看| 国产成人涩涩涩视频在线观看| 久久久精品2019中文字幕神马| 日韩av在线免费看| 亚洲欧美日韩区| 日韩一区二区久久久| 亚洲一区二区中文| 亚洲大胆人体av| 欧美成人免费全部观看天天性色| 亚洲激情视频网| 欧美日韩国产精品一区二区三区四区| 国产精品6699| 欧美精品生活片| 精品中文字幕久久久久久| 午夜精品免费视频| 成人网在线视频| 亚洲欧美激情另类校园| 日韩有码在线电影| 精品国产一区二区三区久久| 欧美一区二三区| 久久久久久久久久久人体| 国产一区二区在线播放| 亚洲国产天堂久久综合| 国产成人福利网站| 国产精品美女主播在线观看纯欲| 91中文精品字幕在线视频| 欧美日韩国产精品一区| 热久久这里只有精品| 国产欧美久久久久久| 97在线视频一区| 91免费的视频在线播放| 亚洲第一视频在线观看| 91高潮精品免费porn| 欧美在线视频a| 国产成人亚洲综合青青| 国产日韩欧美中文在线播放| 欧美色道久久88综合亚洲精品| 日本欧美国产在线| 久久久久亚洲精品| 亚洲视频自拍偷拍| 国产美女高潮久久白浆| 韩国日本不卡在线| 亚洲理论电影网| 国产精品视频精品| 成人看片人aa| 狠狠色狠狠色综合日日小说| 国产精品免费一区| 日韩av一卡二卡| 91在线视频九色| 日韩极品精品视频免费观看| 亚洲国内精品视频| 国产精品久久久久久久久久新婚| 成人日韩av在线| 九色精品美女在线| 正在播放欧美一区| 伊人久久久久久久久久久久久| 亚洲国产精品美女| 欧美高清理论片| 欧美疯狂xxxx大交乱88av| 亚洲美女视频网| 欧洲精品在线视频| 97国产精品视频人人做人人爱| 国产欧美va欧美va香蕉在| 成人黄色av免费在线观看| 日韩av免费网站| 亚洲色图在线观看| 亚洲精品久久7777777| 国产一区二区日韩| 97精品国产91久久久久久| 91精品国产91久久久久久| 91精品国产高清自在线| 亚洲欧洲美洲在线综合| 国产精品精品一区二区三区午夜版| 亚洲专区国产精品| 欧美日本亚洲视频| 欧美性猛交xxx| 亚洲欧洲午夜一线一品| 日韩中文字幕第一页| 精品久久香蕉国产线看观看gif| 66m—66摸成人免费视频| 亚洲夜晚福利在线观看| 亚洲精品久久久久久久久久久| 91精品视频免费| 成人网在线观看| 国产成人精品电影| 亚洲欧洲日本专区| 岛国av午夜精品| 日韩电影网在线| 日韩一区视频在线| 国产精品爽爽ⅴa在线观看| 国产小视频国产精品| 成人网在线免费观看| 成人xxxxx| 欧美激情精品久久久久久| 91久久国产精品91久久性色| 亚洲精美色品网站| 91九色精品视频| 中文字幕欧美视频在线| 成人高h视频在线| 欧美国产视频日韩| 亚洲偷熟乱区亚洲香蕉av| 国产欧美日韩免费看aⅴ视频| 91成人天堂久久成人| 国内精品久久影院| 国产亚洲精品久久久久久777| 中文字幕日韩专区| 成人免费视频97| 在线日韩av观看| 欧美大片va欧美在线播放| 91免费精品视频| 国产suv精品一区二区| 8050国产精品久久久久久| 久久综合五月天| 欧美日韩裸体免费视频| 在线看福利67194| 欧美性xxxx极品hd满灌| 中文欧美日本在线资源| 国产精品美女呻吟| 久久99久久亚洲国产| 国产精品久久久久久久app| 亚洲精品在线视频| 久久国产精品久久久久久| 91久久精品日日躁夜夜躁国产| 992tv成人免费影院| 欧美亚洲日本黄色| 日韩精品在线免费| 中文国产亚洲喷潮| 91精品美女在线| 久久夜色精品国产亚洲aⅴ| 日韩高清中文字幕| 久久久久久高潮国产精品视| 国产精品扒开腿做爽爽爽的视频| 大胆欧美人体视频| 国产成人久久精品| 亚洲欧美日韩成人| 青青久久av北条麻妃海外网| 亚洲图片欧洲图片av| 国产成+人+综合+亚洲欧美丁香花| 国产成人免费av电影| 精品亚洲夜色av98在线观看| 欧美午夜精品久久久久久久| 精品福利视频导航|