GWT中屏蔽右键上下文菜单

在GWT开发中有时会遇到在某一个面板上屏蔽浏览器原来的右键上下文菜单,使用自己定义的上下文菜单.具体实现如下:

 
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Widget;

public interface AdvClickListener extends ClickListener {
	public void onClick(Widget sender, Event event);
	public void onRightClick(Widget sender, Event event);
}
 
public interface AdvClickNotifier {
	public void addClickListener(AdvClickListener listener);
	public void removeClickListener(AdvClickListener listener);
}
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.DeckPanel;

public class AdvDeckPanel extends DeckPanel implements AdvClickNotifier {

	private AdvClickListener listener = null;

	public AdvDeckPanel() {
		super();
		sinkEvents(Event.ONMOUSEUP | Event.ONDBLCLICK | Event.ONCONTEXTMENU); 
	}
	
	public void onBrowserEvent(Event event) {
		GWT.log("onBrowserEvent", null);
        event.cancelBubble(true);//This will stop the event from being propagated to parent elements.
        event.preventDefault();
        switch (DOM.eventGetType(event)) {
	        case Event.ONMOUSEUP:
	        	if (DOM.eventGetButton(event) == Event.BUTTON_LEFT) {
	        		GWT.log("Event.BUTTON_LEFT", null);
	        		listener.onClick(this, event);
	        	}
	        	if (DOM.eventGetButton(event) == Event.BUTTON_RIGHT) {
	        		GWT.log("Event.BUTTON_RIGHT", null);
	        		listener.onRightClick(this, event);
	        	}
	        	break;
	
	        case Event.ONDBLCLICK: 

	        	break;
	        	
	        case Event.ONCONTEXTMENU: 
	        	GWT.log("Event.ONCONTEXTMENU", null);

	        	break;

	        default: 
	                // Do nothing
        }//end switch
	}
	
	public void addClickListener(AdvClickListener listener) {
		this.listener = listener;
	}

	public void removeClickListener(AdvClickListener listener) {
		this.listener = null;
	}

	
import com.google.gwt.core.client.EntryPoint;

public class RightClickEx implements EntryPoint, AdvClickListener {

	private AdvDeckPanel deckPanel = new AdvDeckPanel();
	final private PopupPanel popupPanel = new PopupPanel(true);
	private Label defaultLabel = new Label("Right click here to see the GWT context menu.");
	private Image image = new Image("images/oliver.jpg");
	private Frame sponser = new Frame("green-energy.html");
	
	private VerticalPanel defaultPanel = new VerticalPanel();
	private SimplePanel imagePanel = new SimplePanel();
	private SimplePanel sponserPanel = new SimplePanel();
	
	Command showAlertCommand = new Command() {
		public void execute() {
			deckPanel.showWidget(0);
			popupPanel.hide();
			Window.alert("Hope this example helps.");
		}
	};
	Command showImageCommand = new Command() {
		public void execute() {
			deckPanel.showWidget(1);
			popupPanel.hide();
		}
	};
	Command showSponserCommand = new Command() {
		public void execute() {
			deckPanel.showWidget(2);
			popupPanel.hide();
		}
	};

	
	public void onModuleLoad() {
		VerticalPanel vPanel = new VerticalPanel();
		vPanel.setWidth("250px");
		vPanel.setHeight("280px");
		vPanel.add(deckPanel);
		vPanel.setBorderWidth(2);
		
		deckPanel.addClickListener(this);

		defaultLabel.setPixelSize(220, 280);
		defaultLabel.setStyleName("text-label");
		defaultPanel.add(defaultLabel);
		deckPanel.add(defaultPanel);
		
		imagePanel.add(image);
		deckPanel.add(imagePanel);
		
		VerticalPanel outerVp = new VerticalPanel();
		VerticalPanel tmpVp = new VerticalPanel();
		tmpVp.setPixelSize(220, 15);
		
		sponser.setPixelSize(250, 250);
		sponserPanel.add(sponser);
		outerVp.add(sponserPanel);
		outerVp.add(tmpVp);
		deckPanel.add(outerVp);
		
		createPopupMenu();
		
		deckPanel.showWidget(0);
		RootPanel.get("rightclickex").add(vPanel);
	}
	
	private void createPopupMenu() {
		MenuBar popupMenuBar = new MenuBar(true);
		MenuItem alertItem = new MenuItem("Show alert", true, showAlertCommand);
		MenuItem imageItem = new MenuItem("Show Oliver ", true, showImageCommand);
		MenuItem sponserItem = new MenuItem("Show sponser ", true, showSponserCommand);
		
		popupPanel.setStyleName("popup");

		alertItem.addStyleName("popup-item");
		imageItem.addStyleName("popup-item");
		sponserItem.addStyleName("popup-item");
		popupMenuBar.addItem(alertItem);
		popupMenuBar.addItem(imageItem);
		popupMenuBar.addItem(sponserItem);

    	popupMenuBar.setVisible(true);
    	popupPanel.add(popupMenuBar);
	}

	public void onRightClick(Widget sender, Event event) {
    	int x = DOM.eventGetClientX(event);
    	int y = DOM.eventGetClientY(event);
    	popupPanel.setPopupPosition(x, y);
    	popupPanel.show();
	}
	
	public void onClick(Widget sender, Event event) {
	}


	public void onClick(Widget sender) {
	}
}


 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值