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

📄 listbodycomposite.java

📁 利用它可以做出非常漂亮的swt界面,包含的组件有PShelf Plist
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        int i = findItemNumber(x,y);
       
        if (i > items.size() - 1)
            i = 0;
        
        return (PListItem) items.get(i);        
    }
    
    public void updateSelection(PListItem item,int stateMask){
    	
    	if (singleSelect){
        	int[] toRedraw = new int[selectedItems.size() +2];
        	int i = 0;
        	for (Iterator iter = selectedItems.iterator(); iter.hasNext();) {
				PListItem element = (PListItem) iter.next();
				toRedraw[i] = indexOf(element);
				i++;
			}
            selectedItems.clear();
            
            toRedraw[i++] = indexOf(item);
            selectedItems.add(item);
            
            toRedraw[i++] = indexOf(previousFocus);
            paintItems(toRedraw);
            
            this.fireListeners(item);
    	} else {
	        boolean shift = false;
	        boolean ctrl = false;
	        
	        if ((stateMask & SWT.SHIFT) == SWT.SHIFT)
	            shift = true;
	        
	        if ((stateMask & SWT.CTRL) == SWT.CTRL)
	            ctrl = true;
	
	        if (!shift && !ctrl){
	        	int[] toRedraw = new int[selectedItems.size() +2];
	        	int i = 0;
	        	for (Iterator iter = selectedItems.iterator(); iter.hasNext();) {
					PListItem element = (PListItem) iter.next();
					toRedraw[i] = indexOf(element);
					i++;
				}
	            selectedItems.clear();
	            
	            toRedraw[i++] = indexOf(item);
	            selectedItems.add(item);
	            
	            toRedraw[i++] = indexOf(previousFocus);
	            paintItems(toRedraw);
	            
	            this.fireListeners(item);
	        } else if (shift){
	            if (selectedItems.size() == 0)
	                return;
	            
	            
	            PListItem first = (PListItem) selectedItems.get(0);
	            selectedItems.clear();
	            
	            int max = Math.max(items.indexOf(first),items.indexOf(item));
	            int min = Math.min(items.indexOf(first),items.indexOf(item));
	            
	            //keep the first one first so subsequent selections
	            //will still key off that item
	            selectedItems.add(first);
	            
	            for (int i = min; i <= max; i ++){
	                if (!selectedItems.contains(items.get(i)))
	                    selectedItems.add(items.get(i));
	            }
	            redraw();
	            
	            fireListeners(null);
	            
	        } else if (ctrl) {
	            if (selectedItems.contains(item)){
	                selectedItems.remove(item);
	            } else {
	                selectedItems.add(item);
	            }
	            paintItems(new int[]{indexOf(item),indexOf(previousFocus)});
	            this.fireListeners(item);
	        }
    	}
    }

    public void setStrategy(IListStrategy strategy) {
        this.strategy = strategy;
    }
    
    public void addSelectionListener(SelectionListener listen){
        selectListeners.add(listen);
    }
    
    public void removeSelectionListener(SelectionListener listen){
        selectListeners.remove(listen);
    }
    
    public PListItem getFocus(){
        return focus;
    }
    
    public void setSelection(PListItem[] selection){
        selectedItems.add(selection);
    }
    
    public PListItem getItem(int index){
        return (PListItem) items.get(index);
    }
    
    public PListItem[] getItems(){
        return (PListItem[]) items.toArray();
    }
    
    public PListItem[] getSelection(){
        return (PListItem[]) selectedItems.toArray();
    }
    
    public int getSelectionIndex(){
    	if (selectedItems.size() == 0)
    		return -1;
        return indexOf((PListItem) selectedItems.get(0));
    }
    
    public int[] getSelectionIndices(){
        if (selectedItems.size() < 1)
            return new int[0];
        
        int[] indices = new int[selectedItems.size()];
        int i = 0;
        
        for (Iterator iter = selectedItems.iterator(); iter.hasNext();) {
            PListItem element = (PListItem) iter.next();
            indices[i] = indexOf(element);
            i ++;
        }
        return indices;
    }
    
    public int indexOf(PListItem item){
        return items.indexOf(item);
    }
    
    public void remove(int index){
        remove((PListItem)items.get(index));
    }
    
    public void remove(PListItem item){
        items.remove(item);
        selectedItems.remove(item);
        if (focus == item)
            focus = null;
        redraw();
    }
    
    
    public void removeAll(){
        items.clear();
        selectedItems.clear();
        focus = null;
        list.redraw();
    }
    
    public boolean isSelected(int index){
        return selectedItems.contains(getItem(index));
    }
    
    public void reveal(int index){
        reveal((PListItem)items.get(index));
    }
    
    public void reveal(PListItem item){

        int y1 = 0;
        int y2 = 0;
        
        int max = items.indexOf(item);
        
        for (int i = 0; i <= max;i++){
            y2 += ((Integer) heights.get(i)).intValue();
            if (i < max)
                y1 += ((Integer) heights.get(i)).intValue();
        }
        
        int currentY1 = list.getOrigin().y;
        int currentY2 = currentY1 + list.getClientArea().height;
        
        if (y1 < currentY1){
            list.setOrigin(0,y1);
        } else if (y2 > currentY2){
            
            list.setOrigin(0,y2 - list.getClientArea().height);
        }

    }
    
    private void fireListeners(PListItem selected){
        Event e = new Event();
        e.widget = list;
        SelectionEvent se = new SelectionEvent(e);
        se.item = selected;
        
        list.notifyListeners(SWT.Selection,e);
        
        for (Iterator iter = selectListeners.iterator(); iter.hasNext();) {
            SelectionListener element = (SelectionListener) iter.next();
            element.widgetSelected(se);            
        }
    }
    
    private void paintItems(int[] itemNumbers){
    	
    	ArrayList list = new ArrayList(itemNumbers.length);
    	
    	for (int i = 0; i < itemNumbers.length; i++) {
			int j = itemNumbers[i];
			list.add(new Integer(j));
		}
        
        Font f = this.getFont();
        Color back = this.getBackground();
        Color fore = this.getForeground();

        
        int yOffset = 0;
        int i = 0;
        
        GC gc = new GC(this);
        PGC gcPlus = new PGC(gc);
        
        for (Iterator iter = items.iterator(); iter.hasNext();) {
            PListItem item = (PListItem) iter.next();

            
            if (i > 0)
                yOffset += ((Integer) heights.get(i - 1)).intValue();
            
            gcPlus.setYOffset(yOffset);

            
            if (list.contains(new Integer(i))){
	            
	            strategy.paintItem(item,gcPlus,selectedItems.contains(item),focus == item && this.isFocusControl(),i == hovering,new Point(getSize().x,((Integer)heights.get(i)).intValue()));
	            
	            gc.setFont(f);
	            gc.setBackground(back);
	            gc.setForeground(fore);
            }
            
            i ++;
        }    
        
        gc.dispose();
    }
    private void redrawOnHover(){  	
    	int[] redrawThese = new int[]{-1,-1};
    	
    	if (previousHovering >= 0 && previousHovering < items.size()){
    		if (!isSelected(previousHovering)){
    			redrawThese[0] = previousHovering;
    		}
    	}

    	if (hovering >= 0 && hovering < items.size()){
    		if (!isSelected(hovering)){
    			redrawThese[1] = hovering;
    		}
    	}

    	
    	paintItems(redrawThese);
    }

	public void setSingleSelect(boolean b) {
		singleSelect = b;		
	}
    
}

⌨️ 快捷键说明

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