码迷,mamicode.com
首页 > 其他好文 > 详细

项目:查看器的使用

时间:2015-05-04 19:46:27      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

之前用的是table控件,发现无法更新数据,虽然实现了编辑,但是关掉窗口再打开时还是原来的样子,数据没变,不知道是我程序的问题,还是本来就不能更新。翻了会书,觉得可以试下查看器。

Eclipse插件开发这个本书:

1.查看器框架:
模型成为输入,查看器本身充当控制器,高级控件作为视图,当输入改变时,查看器负责相应的改变控件的内容。主要有list viewer,table viewer,tree viewer。
查看器框架组成部分:
(1)模型何元素:存储着要显示的数据 
(2)内容提供者,标签提供者:负责将数据模型转化为可显示的文字和图片
(3)控件:显示内容
(4)查看器:协调上述工作
内容提供者的任务:
(1)通常外部程序无法直接提供查看器需要的模型,开发者需要自己解析模型,并且从中取得查看器需要的内容。
(2)监听数据模型的变化,当接收到变化的消息时,要通知查看器,然后查看器把这些变化转化成针对控件的操作,反应在界面上。
有个疑问:我能否直接在界面上修改,然后让界面上的修改转化为数据的修改,下次打开时,界面仍然保持修改后的样子?
上面说可以,提供了代码,但是不知道自己试起来如何。
标签提供者的任务:
通过内容提供者得到元素后,将其转化成可以显示的文字和图片。
 
2.所以具体步骤是:
(1)定义元素类,设计数据模型
(2)编写内容提供者,将数据模型中的元素集合提取出来。
(3)编写标签提供者,将每一个元素转换成文本/图片以用于显示。
(4)创建控件
(5)创建内容查看器对象,将内容/标签提供者安装到查看器上,并且为查看器设定数据类型。
 
3.学习:用列表查看器开发一个显示用户信息的程序:
(1)定义作为查看器元素的User类型。
技术分享
 1 package book.ch7.list;
 2 
 3 public class User {
 4     private String id;
 5     private String name;
 6     public User(String id, String name) {
 7         this.id = id;
 8         this.name = name;
 9     }
10     public String getId() {
11         return id;
12     }
13     public void setId(String id) {
14         this.id = id;
15     }
16     public String getName() {
17         return name;
18     }
19     public void setName(String name) {
20         this.name = name;
21     }
22 }
View Code

(2)创建了一个listModel用来维护user对象,可以add或者remove一个user,同时还会向监听者发消息。

技术分享
 1 package book.ch7.list;
 2 
 3 import java.beans.PropertyChangeEvent;
 4 import java.beans.PropertyChangeListener;
 5 import java.beans.PropertyChangeSupport;
 6 import java.util.Vector;
 7 
 8 public class ListModel {
 9 
10     public static final String ADD_ELEMENT = "addElement";
11 
12     public static final String REMOVE_ELEMENT = "removeElement";
13 
14     private PropertyChangeSupport delegate;
15 
16     private Vector content;
17 
18     public ListModel() {
19         content = new Vector();
20         delegate = new PropertyChangeSupport(this);
21     }
22 
23     public void addPropertyChangeListener(PropertyChangeListener listener) {
24         delegate.addPropertyChangeListener(listener);
25     }
26 
27     public void firePropertyChange(PropertyChangeEvent evt) {
28         delegate.firePropertyChange(evt);
29     }
30 
31     public void removePropertyChangeListener(PropertyChangeListener listener) {
32         delegate.removePropertyChangeListener(listener);
33     }
34 
35     public void add(Object element) {
36         if (content.add(element))
37             firePropertyChange(new PropertyChangeEvent(this, ADD_ELEMENT, null,
38                     element));
39     }
40 
41     public void remove(Object element) {
42         if (content.remove(element))
43             firePropertyChange(new PropertyChangeEvent(this, REMOVE_ELEMENT,
44                     null, element));
45     }
46 
47     public Object[] elements() {
48         return content.toArray();
49     }
50 }
View Code

(3)内容提供者

技术分享
 1 package book.ch7.list;
 2 
 3 import java.beans.PropertyChangeEvent;
 4 import java.beans.PropertyChangeListener;
 5 
 6 import org.eclipse.jface.viewers.IStructuredContentProvider;
 7 import org.eclipse.jface.viewers.ListViewer;
 8 import org.eclipse.jface.viewers.Viewer;
 9 
10 public class ListContentProvider implements IStructuredContentProvider,
11         PropertyChangeListener {
12 
13     private ListViewer viewer;
14 
15     private ListModel model;
16 
17     public Object[] getElements(Object inputElement) {
18         return model.elements();
19     }
20 
21     public void dispose() {
22     }
23 
24     public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
25         this.viewer = (ListViewer) viewer;
26 
27         if (oldInput instanceof ListModel)
28             ((ListModel) oldInput).removePropertyChangeListener(this);
29 
30         if (newInput instanceof ListModel) {
31             this.model = (ListModel) newInput;
32             ((ListModel) newInput).addPropertyChangeListener(this);
33         }
34 
35     }
36 
37     public void propertyChange(PropertyChangeEvent evt) {
38         if (ListModel.ADD_ELEMENT.equals(evt.getPropertyName()))
39             viewer.add(evt.getNewValue());
40         if (ListModel.REMOVE_ELEMENT.equals(evt.getPropertyName()))
41             viewer.remove(evt.getNewValue());
42     }
43 }
View Code

(4)标签提供者

技术分享
 1 package book.ch7.list;
 2 
 3 import org.eclipse.jface.viewers.ILabelProvider;
 4 import org.eclipse.jface.viewers.ILabelProviderListener;
 5 import org.eclipse.swt.graphics.Image;
 6 
 7 public class ListLabelProvider implements ILabelProvider {
 8 
 9     public Image getImage(Object element) {
10         return null;
11     }
12 
13     public String getText(Object element) {
14         if(element instanceof User)
15             return ((User)element).getName();
16         return element.toString();
17     }
18 
19     public boolean isLabelProperty(Object element, String property) {
20         return false;
21     }
22     
23     public void dispose() {}
24     
25     public void addListener(ILabelProviderListener listener) {}
26     
27     public void removeListener(ILabelProviderListener listener) {}
28 }
View Code

(5)查看器

技术分享
 1 package book.ch7.list;
 2 
 3 import org.eclipse.jface.viewers.ListViewer;
 4 import org.eclipse.swt.SWT;
 5 import org.eclipse.swt.layout.FillLayout;
 6 import org.eclipse.swt.widgets.Display;
 7 import org.eclipse.swt.widgets.Shell;
 8 
 9 public class UsingListViewer {
10 
11     public static void main(String[] args) {
12         Display display = Display.getDefault();
13         Shell shell = new Shell(display);
14         shell.setSize(400, 400);
15         shell.setLayout(new FillLayout());
16 
17         ListViewer viewer = new ListViewer(shell, SWT.BORDER);
18 
19         viewer.setContentProvider(new ListContentProvider());
20         viewer.setLabelProvider(new ListLabelProvider());
21 
22         ListModel input = new ListModel();
23         viewer.setInput(input);
24         
25         shell.open();
26         shell.layout();
27         
28         input.add(new User("1","张三"));
29         input.add(new User("2","李四"));
30         input.add(new User("3","王五"));
31 
32 
33         while (!shell.isDisposed())
34             if (!display.readAndDispatch())
35                 display.sleep();
36     }
37 
38 }
View Code

 

项目:查看器的使用

标签:

原文地址:http://www.cnblogs.com/liyuhui21310122/p/4476922.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!