标签:
之前用的是table控件,发现无法更新数据,虽然实现了编辑,但是关掉窗口再打开时还是原来的样子,数据没变,不知道是我程序的问题,还是本来就不能更新。翻了会书,觉得可以试下查看器。
Eclipse插件开发这个本书:
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 }
(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 }
(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 }
(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 }
(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 }
标签:
原文地址:http://www.cnblogs.com/liyuhui21310122/p/4476922.html