在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) {
}
}
}
分享到:
相关推荐
在GWT(Google Web Toolkit)中,实现一个简单的树状菜单是常见的需求,尤其是在构建具有层级结构的数据展示或导航功能的Web应用时。GWT提供了一套完整的UI组件库,其中包括Tree和TreeItem类,可以帮助我们轻松创建...
首先,EXT-GWT2.0.1是EXT-GWT(GWT-Ext)的一个版本,它是基于GWT的组件库,提供了丰富的用户界面组件,如表格、树形视图、菜单等,使得开发者可以构建出具有桌面级用户体验的Web应用。EXT-GWT的API和DOC文档对于...
然而,在实际开发过程中,GWT用户会遇到各种各样的问题,其中“如何在GWT应用中实现右键菜单”是一个常见需求。 **GWT方式实现右键菜单:** GWT提供了一种较为直接的方法来实现右键菜单功能。这种方式的优点在于...
Gwt中文手册,GWt入门Gwt中文手册,GWt入门Gwt中文手册,GWt入门
**GWT(Google Web Toolkit)** 是...在学习GWT的过程中,不断实践和理解这些知识点,你将能够熟练掌握GWT,创建出高效、互动性强的Web应用。同时,不要忘记关注GWT社区的最新动态,以便了解最新的开发工具和技术趋势。
EXT-GWT2.0.1+API+DOC Gwt-Ext基础-中级-进阶GWT中文教程
在GWT(Google Web Toolkit)开发中,XMLHttpRequest(XHR)是实现客户端与服务器间异步数据交换的关键技术。GWT提供了对XHR的封装,使得开发者可以方便地使用JavaScript的XMLHttpRequest对象,而无需直接接触底层的...
GWT允许开发者使用Java语言编写客户端代码,然后通过编译器将其转换为优化过的JavaScript,以便在各种浏览器上运行。这个“gwt 练习 gwt学习”项目可能是为了帮助用户熟悉GWT的基本概念、开发流程和最佳实践。 在...
SmartGWT开发通常在Eclipse中进行,因为它提供了对GWT的内置支持。安装完成后,启动Eclipse并安装GWT插件。这可以通过Eclipse的"Help" > "Eclipse Marketplace"菜单完成,搜索“Google Plugin for Eclipse”并按照...
2. **配置环境变量**:右键点击“我的电脑”选择“属性”→“高级系统设置”→“环境变量”,在“系统变量”中找到`Path`变量,将其值修改为包含GWT解压路径的方式。例如,在原变量值末尾添加`;D:\gwt`(注意分号...
2. **自动编译**:GWT将Java代码编译为优化过的JavaScript,这使得应用程序在浏览器中的运行效率得到提高,并且能够支持各种浏览器,包括IE、Firefox、Chrome等。 3. **开发工具**:GWT提供了一个强大的集成开发...
在本文中,我们将深入探讨GWT(Google Web Toolkit)中的各种Panel组件,这些组件是构建交互式Web应用程序的基础。GWT是一种开源的Java框架,它允许开发者使用Java编写客户端代码,然后自动编译为优化的JavaScript,...
3. **安装Google Plugin SDK**:在Eclipse中,通过“Help” > “Install New Software”菜单,输入GWT插件的更新站点地址来安装。安装完成后,你可以在Eclipse的“Preferences”中看到GWT的相关设置。 4. **配置GWT...
SmartGWT则是在GWT的基础上,增加了大量预先封装好的UI组件和实用工具类,包括表格、图表、日历、对话框等,大大减轻了开发者的工作负担。在"Showcase"这个DEMO中,开发者可以找到各种SmartGWT组件的实际示例,了解...