⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tableviewer.java

📁 jfa2ce 源码帮助开发人员更好的理解运用
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
			IBaseLabelProvider prov = getLabelProvider();			ITableLabelProvider tprov = null;					ILabelProvider lprov = null;			IViewerLabelProvider vprov = null;						if(prov instanceof ILabelProvider) {				lprov = (ILabelProvider) prov;			}						if (prov instanceof IViewerLabelProvider) {				vprov = (IViewerLabelProvider) prov;			} 			if (prov instanceof ITableLabelProvider) {				tprov = (ITableLabelProvider) prov;			} 						int columnCount = table.getColumnCount();			TableItem ti = item;			getColorAndFontCollector().setFontsAndColors(element);						// Also enter loop if no columns added. See 1G9WWGZ: JFUIF:WINNT -			// TableViewer with 0 columns does not work			for (int column = 0; column < columnCount || column == 0; column++) {				// Similar code in TreeViewer.doUpdateItem()				String text = "";//$NON-NLS-1$				Image image = null;				tableColorAndFont.setFontsAndColors(ti,element,column);				if (tprov == null) {					if (column == 0) {						ViewerLabel updateLabel = new ViewerLabel(item								.getText(), item.getImage());												if(vprov != null) {							buildLabel(updateLabel,element,vprov);						} else{							if(lprov != null) {								buildLabel(updateLabel,element,lprov);							}						}						//						As it is possible for user code to run the event 			            //loop check here.						if (item.isDisposed()) {			                unmapElement(element, item);			                return;			            }   												text = updateLabel.getText();						image = updateLabel.getImage();					}				} else {					text = tprov.getColumnText(element, column);					image = tprov.getColumnImage(element, column);				}				//Avoid setting text to null				if (text == null) {					text = ""; //$NON-NLS-1$				}				ti.setText(column, text);				if (ti.getImage(column) != image) {					ti.setImage(column, image);				}			}									getColorAndFontCollector().applyFontsAndColors(ti);		}	}	/**	 * Starts editing the given element.	 * 	 * @param element	 *            the element	 * @param column	 *            the column number	 */	public void editElement(Object element, int column) {		tableViewerImpl.editElement(element, column);	}	/**	 * Returns the cell editors of this table viewer.	 * 	 * @return the list of cell editors	 */	public CellEditor[] getCellEditors() {		return tableViewerImpl.getCellEditors();	}	/**	 * Returns the cell modifier of this table viewer.	 * 	 * @return the cell modifier	 */	public ICellModifier getCellModifier() {		return tableViewerImpl.getCellModifier();	}	/**	 * Returns the column properties of this table viewer. The properties must	 * correspond with the columns of the table control. They are used to	 * identify the column in a cell modifier.	 * 	 * @return the list of column properties	 */	public Object[] getColumnProperties() {		return tableViewerImpl.getColumnProperties();	}	/*	 *  (non-Javadoc)	 * @see org.eclipse.jface.viewers.Viewer#getControl()	 */	public Control getControl() {		return table;	}	/**	 * Returns the element with the given index from this table viewer. Returns	 * <code>null</code> if the index is out of range.	 * <p>	 * This method is internal to the framework.	 * </p>	 * 	 * @param index	 *            the zero-based index	 * @return the element at the given index, or <code>null</code> if the	 *         index is out of range	 */	public Object getElementAt(int index) {		if (index >= 0 && index < table.getItemCount()) {			TableItem i = table.getItem(index);			if (i != null) {				return i.getData();			}		}		return null;	}	/**	 * The table viewer implementation of this <code>Viewer</code> framework	 * method returns the label provider, which in the case of table viewers	 * will be an instance of either <code>ITableLabelProvider</code> or	 * <code>ILabelProvider</code>. If it is an	 * <code>ITableLabelProvider</code>, then it provides a separate label	 * text and image for each column. If it is an <code>ILabelProvider</code>,	 * then it provides only the label text and image for the first column, and	 * any remaining columns are blank.	 */	public IBaseLabelProvider getLabelProvider() {		return super.getLabelProvider();	}	/*	 *  (non-Javadoc)	 * @see org.eclipse.jface.viewers.StructuredViewer#getSelectionFromWidget()	 */	protected List getSelectionFromWidget() {		if(virtualManager != null) {			return getVirtualSelection();		}		Widget[] items = table.getSelection();		ArrayList list = new ArrayList(items.length);		for (int i = 0; i < items.length; i++) {			Widget item = items[i];			Object e = item.getData();			if (e != null) {				list.add(e);			}		}		return list;	}		/**	 * Get the virtual selection. Avoid calling SWT whenever possible	 * to prevent extra widget creation.	 * @return List of Object	 */	private List getVirtualSelection() {				List result = new ArrayList();		int[] selectionIndices = getTable().getSelectionIndices(); 		if(getContentProvider() instanceof ILazyContentProvider){			ILazyContentProvider lazy = (ILazyContentProvider) getContentProvider();			for (int i = 0; i < selectionIndices.length; i++) {				int selectionIndex = selectionIndices[i];				lazy.updateElement(selectionIndex);//Start the update				Object element = getTable().getItem(selectionIndex).getData();				//Only add the element if it got updated.				//If this is done deferred the selection will				//be incomplete until selection is finished.				if (element != null) {					result.add(element);				}							}		}		else{			for (int i = 0; i < selectionIndices.length; i++) {				Object element = null;				//See if it is cached				int selectionIndex = selectionIndices[i];				if (selectionIndex < virtualManager.cachedElements.length){					element = virtualManager.cachedElements[selectionIndex];				}				if (element == null){					// Not cached so try the item's data					TableItem item = getTable().getItem(selectionIndex);					element = item.getData();				}				if (element != null) {					result.add(element);				}							}								}		return result;	}	/**	 * Returns this table viewer's table control.	 * 	 * @return the table control	 */	public Table getTable() {		return table;	}	/*	 *  (non-Javadoc)	 * @see org.eclipse.jface.viewers.ContentViewer#hookControl(org.eclipse.swt.widgets.Control)	 */	protected void hookControl(Control control) {		super.hookControl(control);		Table tableControl = (Table) control;		tableControl.addMouseListener(new MouseAdapter() {			public void mouseDown(MouseEvent e) {				tableViewerImpl.handleMouseDown(e);			}		});	}	/*	 * Returns the index where the item should be inserted.	 */	protected int indexForElement(Object element) {		ViewerComparator comparator = getComparator();		if (comparator == null) {			return table.getItemCount();		}		int count = table.getItemCount();		int min = 0, max = count - 1;		while (min <= max) {			int mid = (min + max) / 2;			Object data = table.getItem(mid).getData();			int compare = comparator.compare(this, data, element);			if (compare == 0) {				// find first item > element				while (compare == 0) {					++mid;					if (mid >= count) {						break;					}					data = table.getItem(mid).getData();					compare = comparator.compare(this, data, element);				}				return mid;			}			if (compare < 0) {				min = mid + 1;			} else {				max = mid - 1;			}		}		return min;	}	/**	 * Initializes the table viewer implementation.	 */	private void initTableViewerImpl() {		tableViewerImpl = new TableEditorImpl(this) {			Rectangle getBounds(Item item, int columnNumber) {				return ((TableItem) item).getBounds(columnNumber);			}			int getColumnCount() {				return getTable().getColumnCount();			}			Item[] getSelection() {				return getTable().getSelection();			}			void setEditor(Control w, Item item, int columnNumber) {				tableEditor.setEditor(w, (TableItem) item, columnNumber);			}			void setSelection(StructuredSelection selection, boolean b) {				TableViewer.this.setSelection(selection, b);			}			void showSelection() {				getTable().showSelection();			}			void setLayoutData(CellEditor.LayoutData layoutData) {				tableEditor.grabHorizontal = layoutData.grabHorizontal;				tableEditor.horizontalAlignment = layoutData.horizontalAlignment;				tableEditor.minimumWidth = layoutData.minimumWidth;			}			void handleDoubleClickEvent() {				Viewer viewer = getViewer();				fireDoubleClick(new DoubleClickEvent(viewer, viewer						.getSelection()));				fireOpen(new OpenEvent(viewer, viewer.getSelection()));			}		};	}	/*	 *  (non-Javadoc)	 * @see org.eclipse.jface.viewers.Viewer#inputChanged(java.lang.Object, java.lang.Object)	 */	protected void inputChanged(Object input, Object oldInput) {		getControl().setRedraw(false);		try {			// refresh() attempts to preserve selection, which we want here			refresh();		} finally {			getControl().setRedraw(true);		}	}	/**	 * Inserts the given element into this table viewer at the given position.	 * If this viewer has a sorter, the position is ignored and the element is	 * inserted at the correct position in the sort order.	 * <p>	 * This method should be called (by the content provider) when elements have	 * been added to the model, in order to cause the viewer to accurately	 * reflect the model. This method only affects the viewer, not the model.	 * </p>	 * 	 * @param element	 *            the element	 * @param position	 *            a 0-based position relative to the model, or -1 to indicate	 *            the last position	 */	public void insert(Object element, int position) {		tableViewerImpl.applyEditorValue();		if (getComparator() != null || hasFilters()) {			add(element);			return;		}		if (position == -1) {			position = table.getItemCount();		}				createItem(element,position);	}	/*	 *  (non-Javadoc)	 * @see org.eclipse.jface.viewers.StructuredViewer#internalRefresh(java.lang.Object)	 */	protected void internalRefresh(Object element) {		internalRefresh(element, true);	}	/*	 *  (non-Javadoc)	 * @see org.eclipse.jface.viewers.StructuredViewer#internalRefresh(java.lang.Object, boolean)	 */	protected void internalRefresh(Object element, boolean updateLabels) {		tableViewerImpl.applyEditorValue();		if (element == null || equals(element, getRoot())) {			if(virtualManager == null) {				internalRefreshAll(updateLabels);			} else{				internalVirtualRefreshAll();			}		} else {			Widget w = findItem(element);			if (w != null) {				updateItem(w, element);			}		}	}	/**	 * Refresh all with virtual elements.	 * 	 * @since 3.1	 */	private void internalVirtualRefreshAll() {				Object root = getRoot();		IContentProvider contentProvider = getContentProvider();				//Invalidate for lazy		if(!(contentProvider instanceof ILazyContentProvider) 				&& (contentProvider instanceof IStructuredContentProvider)) {			//Don't cache if the root is null but cache if it is not lazy.			if(root != null){				virtualManager.cachedElements = 					((IStructuredContentProvider) getContentProvider()).getElements(root);				getTable().setItemCount(virtualManager.cachedElements.length);			}		}		getTable().clearAll();	}	/**	 * Refresh all of the elements of the table. update the	 * labels if updatLabels is true;	 * @param updateLabels	 * 	 * @since 3.1	 */	private void internalRefreshAll(boolean updateLabels) {		// the parent		// in the code below, it is important to do all disassociates		// before any associates, since a later disassociate can undo an

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -