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

📄 listcombostrategy.java

📁 利用它可以做出非常漂亮的swt界面,包含的组件有PShelf Plist
💻 JAVA
字号:
package com.swtplus.widgets.combo;

import java.util.ArrayList;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Text;

import com.swtplus.internal.Assert;
import com.swtplus.widgets.AutoComplete;
import com.swtplus.widgets.PCombo;
import com.swtplus.widgets.autocomplete.IAutoCompleteProvider;

/**
 * ListComboStrategy creates a PCombo that is very similar to the SWT
 * CCombo.  This ListComboStrategy does have some benefits over a normal
 * CCombo, namely focus-flicker minimization.
 * <p>
 * The value object returned to the PCombo is a String.
 */
public class ListComboStrategy implements IComboStrategy {

	private List list;
	private int visibleItemCount = 5;
	private Image image = null;
	
	private boolean autoComplete = false;
	private int style;
	
	public static final int AUTOCOMPLETE = 1 << 1;
	
	/**
	 * Creates a ListComboStrategy with the given style.
	 * 
	 * @param style strategy style bit
	 */
	public ListComboStrategy(int style) {
		if ((style & AUTOCOMPLETE) == AUTOCOMPLETE){
            autoComplete = true;
		}
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#getSize(int)
	 */
	public Point getSize(int comboWidth) {
		int x = Math.max(comboWidth,list.computeSize(SWT.DEFAULT,SWT.DEFAULT).x);
		int items = Math.min(visibleItemCount,list.getItemCount());
		return new Point(x,items * list.getItemHeight());
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#createContents(org.eclipse.swt.widgets.Composite, com.swtplus.widgets.combo.IComboUpdater)
	 */
	public Control createContents(Composite parent, final IComboUpdater updater)
	{
		list = new List(parent,SWT.V_SCROLL);

		list.addSelectionListener(new SelectionListener(){
			public void widgetSelected(SelectionEvent e) {
				updater.update(list.getSelection()[0],true);
			}
			public void widgetDefaultSelected(SelectionEvent e) {
			}}
		);
		
		return list;
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#keyUp(com.swtplus.widgets.combo.IComboUpdater)
	 */
	public void keyUp(IComboUpdater updater) {
		int sel = list.getSelectionIndex();
		if (sel < 1)
			return;
		list.setSelection(sel -1);
		list.showSelection();
		updater.update(list.getSelection()[0],false);
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#keyDown(com.swtplus.widgets.combo.IComboUpdater)
	 */
	public void keyDown(IComboUpdater updater) {
		if (list.getItemCount() == 0)
			return;
		int sel = list.getSelectionIndex();
		if (sel == -1){
			list.setSelection(0);
		} else if (sel != list.getItemCount() -1){
			list.setSelection(sel +1);
		} else if (sel == list.getItemCount()){
			return;
		}
		list.showSelection();
		updater.update(list.getSelection()[0],false);
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#selectValue(java.lang.Object)
	 */
	public void selectValue(Object newValue) {
		list.setSelection(new String[]{(String) newValue});
	}

	/**
	 * Returns the List widget created on the popup.
	 * 
	 * @return the underlying List widget
	 */
	public List getList() {
		return list;
	}
	
	/**
	 * Returns the number of items that will be visible in the
	 * popup.
	 * 
	 * @return Items to be visible
	 */
	public int getVisibleItemCount() {
		return visibleItemCount;
	}

	/**
	 * Sets how many items will be visible in the popup.
	 * @param itemsToShow Items to be visible
	 * 
	 */
	public void setVisibleItemCount(int itemsToShow) {
		this.visibleItemCount = itemsToShow;
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#canReturnFocusOnMouseDown()
	 */
	public boolean canReturnFocusOnMouseDown() {
		return true;
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#mouseWheel(int)
	 */
	public void mouseWheel(int linesToScroll){
		linesToScroll = -linesToScroll;
		if (list.getItemCount() == 0)
			return;
		
		int current = list.getTopIndex();
		current += linesToScroll;
		if (current < 0){
			current = 0;
		} else if (current > list.getItemCount() -1){
			current = list.getItemCount() -1;
		}
		list.setTopIndex(current);
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#dispose()
	 */
	public void dispose() {
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#createLabelProvider()
	 */
	public IComboLabelProvider createLabelProvider(){
		IComboLabelProvider labelProvider = new IComboLabelProvider(){
			public String getText(Object element) {
				return (String) element;
			}
			public Image getImage(Object element) {
				return image;
			}
			public String getToolTip(Object element) {
				return (String) element;
			}
			public void dispose() {
			}
		};
		
		return labelProvider;
	}

	/**
	 * Returns the default image.
	 * 
	 * @return default image
	 */
	public Image getImage() {
		return image;
	}

	/**
	 * Sets a default image to be used for the PCombo.
	 * 
	 * @param image default image
	 */
	public void setImage(Image image) {
		this.image = image;
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#jumpTo(java.lang.String)
	 */
	public void jumpTo(String beginning) {
		String[] items = list.getItems();
		for (int i = 0; i < items.length; i++) {
			String item = items[i];
			if (item.toLowerCase().startsWith(beginning.toLowerCase())){
				list.setTopIndex(i);
				break;
			}
		}
		
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#initializeEditor(org.eclipse.swt.widgets.Text)
	 */
	public void initializeEditor(Text editor) {
		if (autoComplete == true){
			int acStyle = SWT.NONE;
			
			if ((style & PCombo.RESIZE) == PCombo.RESIZE){
	            acStyle = AutoComplete.RESIZE;
			}
			
			new AutoComplete(editor,acStyle,new IAutoCompleteProvider() {
				public String[] getValues(String[] values, String typedText) {
					String[] listValues = list.getItems();
					ArrayList display = new ArrayList();
					for (int i = 0; i < listValues.length; i++) {
						if (listValues[i].toLowerCase().startsWith(typedText.toLowerCase()))
							display.add(listValues[i]);
					}
					return (String[]) display.toArray(new String[0]);
				}		
			});
		}
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#initialize(com.swtplus.widgets.combo.PCombo)
	 */
	public void initialize(PCombo pCombo) {
		style = pCombo.getStyle();
		
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#checkValue(java.lang.Object)
	 */
	public void checkValue(Object newValue) {
		Assert.isTrue(newValue instanceof String,"Value must be instance of String");		
	}

	/* (non-Javadoc)
	 * @see com.swtplus.widgets.combo.IComboStrategy#isLazyCreation()
	 */
	public boolean isLazyCreation() {
		return false;
	}
	

}

⌨️ 快捷键说明

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