swing学习 - MVC体系理解

      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();

 

     //列中的渲染器直接由外界传递进来的。

 

 

除了渲染器还有一个需要主要提高效率的地方,请分析下面的二段代码,应该写哪一个

 

代码一:

  1. JComboBox box = new JComboBox();   
  2. for (int i = 0; i < numItems; i++) {   
  3.     box.addItem(new Integer(i));   

代码二:

Vector v = new Vector(numItems);    for (int i = 0; i < numItems; i++) {       v.add(new Integer(i));    }    ComboBoxModel model = new DefaultComboBoxModel(v);    JComboBox box = new JComboBox(model); 

我渲染的当然是方法二了。第一段代码非常清晰,就是给下拉列表添加数据,按照正常的API进行,这样如果数据量不大,没有问题,需要考虑了,时间会很长,因为他每次添加一个就会提示变化事件,进行一次显示逻辑,非常的浪费资源。第二种模式将数据全部补充好了,一次性的进行提醒,节约了处理的时间,也是非常好的提高效率的方式。

 

 

 

编写swing程序,需要从cpu和内存二个方面对于程序进行优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值