`
yelr_j
  • 浏览: 67535 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Swt jface 提供了virtual table 和 virtual tree(转)

 
阅读更多

使用虚拟表和虚拟树的确可以很大程度地提供UI界面的性能,尤其是在大数据量的情况下,对于TableViewer使用虚拟表很简单,只要在创建TableViewer的时候指定SWT.VIRTUAL即可

tableViewer = new TableViewer(container, SWT.FULL_SELECTION
| SWT.BORDER | SWT.HIDE_SELECTION|SWT.VIRTUAL);

 

在以前的版本,TableViewer要使用virtual table的时候,需要实现ILazyContentProvider接口,但是目前好像是不用了,下面附上两个eclipse社区提供的例子

Snippet030VirtualLazyTableViewer.java,使用的是实现ILazyContentProvider接口

import org.eclipse.jface.viewers.ILazyContentProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
* A simple TableViewer to demonstrate usage of an ILazyContentProvider. You can compare this snippet to the Snippet029VirtualTableViewer
* to see the small but needed difference.
*
* @author Tom Schindl <tom.schindl@bestsolution.at>
*
*/
public class Snippet030VirtualLazyTableViewer {
private class MyContentProvider implements IStructuredContentProvider, ILazyContentProvider {
private TableViewer viewer;
private MyModel[] elements;

public MyContentProvider(TableViewer viewer) {
this.viewer = viewer;
}

/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object inputElement) {
return elements;
}

/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {

}

/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
this.elements = (MyModel[])newInput;
}

public void updateElement(int index) {
viewer.replace(elements[index], index);
}

}

public class MyModel {
public int counter;

public MyModel(int counter) {
this.counter = counter;
}

public String toString() {
return "Item " + this.counter;
}
}

public Snippet030VirtualLazyTableViewer(Shell shell) {
final TableViewer v = new TableViewer(shell,SWT.VIRTUAL);
v.setLabelProvider(new LabelProvider());
v.setContentProvider(new MyContentProvider(v));
v.setUseHashlookup(true);
MyModel[] model = createModel();
v.setInput(model);
v.setItemCount(model.length); // This is the difference when using a ILazyContentProvider

v.getTable().setLinesVisible(true);
}

private MyModel[] createModel() {
MyModel[] elements = new MyModel[10000];

for( int i = 0; i < 10000; i++ ) {
elements[i] = new MyModel(i);
}

return elements;
}

/**
* @param args
*/
public static void main(String[] args) {
Display display = new Display ();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
new Snippet030VirtualLazyTableViewer(shell);
shell.open ();

while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}

display.dispose ();

}

}

 

 

Snippet029VirtualTableViewer.java 更加方便,直接指定SWT.VIRTUAL即可

import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
* A simple TableViewer to demonstrate the usage of a standard content provider
* with a virtual table
*
* @author Tom Schindl <tom.schindl@bestsolution.at>
*
*/
public class Snippet029VirtualTableViewer {
private class MyContentProvider implements IStructuredContentProvider {
private MyModel[] elements;

/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object inputElement) {
return elements;
}

/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {

}

/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
* java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
this.elements = (MyModel[]) newInput;
}
}

public class MyModel {
public int counter;

public MyModel(int counter) {
this.counter = counter;
}

public String toString() {
return "Item " + this.counter;
}
}

public Snippet029VirtualTableViewer(Shell shell) {
long time1=System.currentTimeMillis();
final TableViewer v = new TableViewer(shell,SWT.VIRTUAL);
v.setLabelProvider(new LabelProvider());
v.setContentProvider(new MyContentProvider());
v.setUseHashlookup(true);
MyModel[] model = createModel();
v.setInput(model);

v.getTable().setLinesVisible(true);
System.out.println(System.currentTimeMillis()-time1);
}

private MyModel[] createModel() {
MyModel[] elements = new MyModel[10000];

for (int i = 0; i < 10000; i++) {
elements[i] = new MyModel(i);
}

return elements;
}

/**
* @param args
*/
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
new Snippet029VirtualTableViewer(shell);
shell.open();

while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}

display.dispose();

}

}

 

来源网址:http://www.blogjava.net/cherishchen/archive/2007/06/26/126271.aspx

分享到:
评论

相关推荐

    SWT JFACE 编程笔记

    SWT JFACE 编程笔记 , 比较适合刚 解除 java swt jface 的开发人员

    Eclipse SWT JFace核心应用_pdf_含标签_目录

    《Eclipse SWT/Jface核心应用》全面介绍了SWT、JFace和RCP的相关知识。全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的...

    SWT/JFace专题 --- SWT/JFace概述

    1. SWT控件:包括Button、Text、Table、Tree、Composite等基本和复杂的控件,以及如何使用它们构建用户界面。 2. JFace数据绑定:讲解如何使用IDataProvider和IStructuredModel来实现视图和数据之间的动态同步。 3. ...

    Eclipse SWT JFace核心应用

    Eclipse SWT JFace核心应用 PDF

    配套源码_可视化JAVA SWT JFACE GUI程序设计教程

    7. **表和树组件**:如何使用SWT和JFace提供的表格和树形控件,展示和操作复杂的数据结构。 8. **国际化和本地化**:如何使应用程序适应不同的语言环境,实现多语言支持。 9. **性能优化**:针对SWT的特性,讨论...

    SWT.rar_java swt_jface api_swt api_swt jface_swt jface 3.4 api

    JFace API则在SWT的基础上进一步抽象,提供了一些高级组件,如数据绑定、对话框、视图和编辑器框架。它减少了编写代码的复杂性,使得开发者可以更专注于业务逻辑而不是底层的GUI实现。例如,JFace的数据绑定允许...

    Swt JFace in Action 中文版

    《Swt JFace in Action》是一本专注于Java图形用户界面(GUI)开发的专业书籍,中文版的出现使得更多的中国开发者能够深入理解并掌握Swt和JFace这两个强大的库。本书详细介绍了如何使用Eclipse的这两项核心技术来...

    Eclipse SWT JFace核心应用 PDF.part2

    Eclipse SWT JFace核心应用 Eclipse SWT JFace核心应用

    SWT JFACE in Action(中文)

    JFace提供了一组高级组件、视图、对话框和事件处理机制,使得开发者可以专注于业务逻辑,而无需过多关注底层的SWT细节。例如,JFace的数据绑定机制允许开发者将数据模型直接与UI组件关联,减少了数据管理的代码量。 ...

    swt/jface.jar

    JFace是建立在SWT之上的高级UI框架,简化了UI组件的创建和管理,提供了数据绑定、事件处理和视图模型等高级功能。 描述中提到的"swt/Jface用到的最基本的jar包"暗示了这个jar文件是构建基于SWT和JFace的应用程序的...

    全面介绍SWT-JFace

    在"Oreilly.SWT.A.Developers.Notebook.Oct.2004.eBook-LiB.chm"这本书中,读者可以深入学习SWT和JFace的使用方法,包括控件的创建、事件处理、布局管理、数据模型的构建、对话框的使用,以及如何在Eclipse插件开发...

    swt_jface.jar

    使用swt jface图形界面技术需要用到的jar文件。Swt,jface是一款非常优秀的javaUI库

    Eclipse SWT JFace 核心应用

    声明:该文件不能以任何形式用于商业用途,仅供个人学习使用,如有侵权请联系我删除。如有不便,敬请原谅。

    SWT Jface知识点

    SWT Jface知识点,Eclipse SWT/JFace核心应用

    记事本 用SWT和Jface编写 可直接运行

    标题中的“记事本 用SWT和Jface编写 可直接运行”表明这是一个使用SWT(Standard Widget Toolkit)和JFace库开发的文本编辑器应用程序,类似于Windows系统中的“记事本”。这个程序可以无需额外编译或配置,直接运行...

    swt/jface实例开发

    1. **基础控件的使用**:如何创建和配置SWT和JFace的基本组件,如Button、Text、Table等。 2. **布局管理**:讲解如何使用GridLayout、FormLayout、FillLayout等布局管理器来组织控件。 3. **事件处理**:如何编写...

    SWT/Jface API 3.4

    7. **Table and Tree Widgets**:SWT 提供了 Table 和 Tree 控件,允许用户显示和操作数据。在 JFace 中,TableViewer 和 TreeViewer 扩展了这些功能,添加了数据绑定和自定义列渲染等功能。 8. **Layout Managers*...

    SWT JFace in action API

    在Java开发中,尤其是对于桌面应用程序,SWT 和 JFace 提供了丰富的控件和高级功能,使得开发者能够创建出美观且功能强大的用户界面。"SWT JFace in action API" 涵盖了这两个库的核心概念和实际应用。 SWT 是一个...

Global site tag (gtag.js) - Google Analytics