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

📄 outlookbar.java

📁 用java 实现的IE browser适合于学者
💻 JAVA
字号:
package com.hnjchina.example.outlook;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Layout;

public class OutlookBar extends Composite implements MouseListener,DisposeListener{
    private Color background;
    private Color foreground;
    private Color beginColor;
    private Color endColor;
    private OutlookBarGroup selectedGroup;
    private java.util.Map groups;
    private java.util.Map groupsByControl;
    private java.util.Map groupsByComposite;
    private java.util.Map itemsByControl;
    private java.util.List groupsList;
    private OutlookBarLayout layout;
    private int iconSize = 64;    
    
	class OutlookBarItemLayout extends Layout{
	    public OutlookBarItemLayout(OutlookBarGroup aGroup){group = aGroup;}
	    protected Point computeSize(Composite aComposite, int wHint, int hHint, boolean flushCache){
	        return group.getComposite().getSize();
	    }

	    protected void layout(Composite aComposite, boolean flushCache){
	        List itemList = group.getItemList();
	        Point size = group.getComposite().getSize();
	        int top = 4;
	        int width = size.x - 4;
	        int left = (width - getIconSize()) / 2;

	        for(int i = 0; i < itemList.size(); i++)
	        {
	            OutlookBarItem item = (OutlookBarItem)itemList.get(i);
	            Control control = item.getPeer();
	            control.setBounds(left, top, getIconSize(), getIconSize());
	            top += getIconSize() + 4;
	            Label itemLabel = item.getLabel();
	            itemLabel.setBounds(0, top, width, 16);
	            top = top + 16 + 12;
	        }

	    }

	    private OutlookBarGroup group;
	}

	class OutlookBarLayout extends Layout{
	    public OutlookBarLayout(){}
	    protected Point computeSize(Composite aComposite, int wHint, int hHint, boolean flushCache)
	    {
	        return getSize();//outlookBar.getSize(); 
	    }
	    protected void layout(Composite aComposite, boolean flushCache){
	        List groupList = getGroupsList();//outlookBar.getGroupsList();
	        Point barSize = getSize();//outlookBar.getSize();
	        int top = 0;
	        int left = 0;

	        for(int i = 0; i < groupList.size(); i++)
	        {
	            OutlookBarGroup group = (OutlookBarGroup)groupList.get(i);
	            ScrolledComposite groupContainer = group.getComposite();
	            Control control = group.getPeer();
	            if(group.isSelected())
	            {
	                control.setBounds(left, top, barSize.x, 24);
	                top += 24;
	                int controlBottom = layoutBottomUp(groupList, i, left, barSize.x, barSize.y);
	                
	                groupContainer.setVisible(true);
	                groupContainer.setBounds(left, top, barSize.x, controlBottom - top);
	                groupContainer.getContent().setBounds(left,0,barSize.x,group.getItemList().size()*(getIconSize() + 32));
	                return;
	            }
	            control.setBounds(0, top, barSize.x, 24);
	            top += 24;
	            groupContainer.setVisible(false);
	        }

	    }

	    protected int layoutBottomUp(List aList, int aPosition, int aLeft, int aWidth, int aHeight){
	        int top = aHeight;
	        int width = aWidth;
	        for(int i = aList.size() - 1; i > aPosition; i--)
	        {
	            OutlookBarGroup group = (OutlookBarGroup)aList.get(i);
	            top -= 24;
	            Control control = group.getPeer();
	            control.setBounds(aLeft, top, width, 24);
	            ScrolledComposite groupContainer = group.getComposite();
	            groupContainer.setVisible(false);
	        }
	        return top;
	    }
	}
    public OutlookBar(Composite aComposite, int i){
        super(aComposite, i);
        selectedGroup = null;
        groups = new HashMap();
        groupsByControl = new HashMap();
        groupsByComposite = new HashMap();
        itemsByControl = new HashMap();
        groupsList = new ArrayList();
        layout = new OutlookBarLayout();
        setLayout(layout);
        if(background == null)
        {
            background = new Color(aComposite.getDisplay(), 125, 125, 125);
            foreground = new Color(aComposite.getDisplay(), 255, 255, 255);
            beginColor = new Color(aComposite.getDisplay(), 115,140,165);
            endColor = new Color(aComposite.getDisplay(), 185,200,210);
        }
        setBackground(background);
        addDisposeListener(this);
    }

    protected java.util.Map getGroups(){
        return groups;
    }
    public void addGroup(OutlookBarGroup aGroup){
    	CLabel groupButton = new CLabel(this,SWT.FLAT | SWT.CENTER | SWT.BORDER);
    	groupButton.setBackground(new Color[]{beginColor,endColor},new int[] {100}, true);

        aGroup.setPeer(groupButton);
        groupButton.setText(aGroup.getName());
        groupButton.addMouseListener(this);
        ScrolledComposite groupContainer = new ScrolledComposite(this, SWT.V_SCROLL | SWT.BORDER);
        groupContainer.setBackground(background);
        Composite itemContainer = new Composite(groupContainer, SWT.NONE);
        groupContainer.setContent(itemContainer);
        groupContainer.setMinWidth(getIconSize());
        itemContainer.setLayout(new OutlookBarItemLayout(aGroup));
        
        aGroup.setComposite(groupContainer);
        itemContainer.setBackground(background);
        groups.put(aGroup.getId(), aGroup);
        groupsByControl.put(groupButton, aGroup);
        groupsByComposite.put(groupContainer, aGroup);
        groupsList.add(aGroup);
        aGroup.setPosition(groups.size());
        if(selectedGroup == null)
        {
            selectedGroup = aGroup;
            aGroup.setSelected(true);
        }
    }

    public boolean isSelected(OutlookBarGroup aGroup){
        if(selectedGroup != null)
        {
            return aGroup.getId().equals(selectedGroup.getId());
        } else
        {
            selectedGroup = aGroup;
            aGroup.setSelected(true);
            return true;
        }
    }

    public void addItem(String aGroup, OutlookBarItem aItem){
        OutlookBarGroup group = (OutlookBarGroup)groups.get(aGroup);
        aItem.setGroup(group);
		
        Button itemButton = new Button((Composite)(group.getComposite().getContent()), SWT.FLAT);
        aItem.setPeer(itemButton);
        itemButton.setImage(aItem.getImage());

        Label itemLabel = new Label((Composite)(group.getComposite().getContent()), 0);
        aItem.setLabel(itemLabel);
        itemLabel.setText(aItem.getName());
        itemLabel.setAlignment(0x1000000);
        itemLabel.setBackground(background);
        itemLabel.setForeground(foreground);
        group.addItem(aItem);
        itemsByControl.put(itemButton, aItem);
    }

    public OutlookBarGroup getGroupByControl(Control aControl){
        return (OutlookBarGroup)groupsByControl.get(aControl);
    }

    public OutlookBarGroup getGroupByComposite(Control aControl){
        return (OutlookBarGroup)groupsByComposite.get(aControl);
    }

    public java.util.List getGroupsList(){return groupsList;}
	public int getIconSize() {return iconSize;}
	public void setIconSize(int iconSize) {
		this.iconSize = iconSize;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.swt.events.MouseListener#mouseDoubleClick(org.eclipse.swt.events.MouseEvent)
	 */
	public void mouseDoubleClick(MouseEvent arg0) {}

	/* (non-Javadoc)
	 * @see org.eclipse.swt.events.MouseListener#mouseDown(org.eclipse.swt.events.MouseEvent)
	 */
	public void mouseDown(MouseEvent arg0) {
		// TODO Auto-generated method stub		
	}
	/* (non-Javadoc)
	 * @see org.eclipse.swt.events.MouseListener#mouseUp(org.eclipse.swt.events.MouseEvent)
	 */
	public void mouseUp(MouseEvent event) {
		// TODO Auto-generated method stub
		Control vControl = (Control)event.widget;
        OutlookBarGroup group = getGroupByControl(vControl);
        if(group != null){
        	if(group.isSelected())
        		return;
            selectedGroup.setSelected(false);
            group.setSelected(true);
            selectedGroup = group;
        }
        layout();
	}
	public void widgetDisposed(DisposeEvent arg0) {
		background.dispose();
		foreground.dispose();
		beginColor.dispose();
		endColor.dispose();
	}
}

⌨️ 快捷键说明

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