亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

純 GWT,事件轉換

純 GWT,事件轉換

千巷貓影 2022-12-15 16:32:36
因此,我在 GWT 中有一個“FlexTable”,我需要在右鍵單擊某個單元格時下拉操作列表。在鼠標左鍵單擊以檢索我的單元格的“rowIndex”時,我只需使用 ClickEvent 方法“getCellForEvent(event).getRowIndex()”。但是純 GWT 中沒有右鍵單擊處理程序。所以我決定使用需要 ContextMenuEvent 的 ContextMenuHandler。當然,我不能將 ContextMenuEvent 放入 ClickEvent 方法“getCellForEvent”中。這種情況有什么解決辦法嗎?或者也許有人知道在右鍵單擊“FlexTable”時下拉列表的更簡單方法。
查看完整描述

3 回答

?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

我已經為 CellTable 或 DataGrid 小部件完成了此操作,但沒有為 FlexTable 完成此操作。對于前者,我將一個處理程序對象應用于整個網格小部件,并使用該事件計算出事件發生的行或單元格。我看不出如何使用 FlexTable 完成此操作。


使用 FlexTable 時,一個技巧是為每個單元格創建一個處理程序對象,并在創建時告訴它單元格/行。是這樣的:


    cell.addDomHandler(new ContextMenuHandler() {

        @Override

        public void onContextMenu(ContextMenuEvent event)

        {

            // stop the browser from opening the context menu

            event.preventDefault();

            event.stopPropagation();


            NativeEvent nativeClickEvent = event.getNativeEvent();


            displayPopupMenuForCell(cell, nativeClickEvent);

        }

    }, ContextMenuEvent.getType());

在上面,cell需要是一個Widget。因此,您需要獲取 HTMLTable 中的元素(FlexTable 擴展了 HTMLTable,這是一個普通的 HTML 表格元素)并將其包裝為一個 Widget。我不確定該怎么做,但這是可能的。


另一件事,您需要防止瀏覽器彈出自己的上下文菜單。我將其添加到body標簽中的 html 文件中:


  <body oncontextmenu="return false" >


查看完整回答
反對 回復 2022-12-15
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

實際上你可以使用點擊處理程序來檢查點擊了哪個按鈕,左,右或中間你需要做的是這樣的:


Button button= new Button();

button.addClickHandler(event -> {

    NativeEvent nativeEvent = event.getNativeEvent();

    if(NativeEvent.BUTTON_RIGHT == nativeEvent.getButton()){

        event.stopPropagation();

        //do something

    }

});


查看完整回答
反對 回復 2022-12-15
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

如果您使用 CellTable 或 DataGrid Widget,您可以處理CellPreviewEvent單擊單元格時觸發的 ,它還可以告訴您事件發生在哪一行/單元格中。這是一些代碼:


private void makeItemRightClickListener()

{

    grid.addCellPreviewHandler(new CellPreviewEvent.Handler<T>() {

        @Override

        public void onCellPreview(CellPreviewEvent<T> event)

        {

            if (event.getNativeEvent().getButton() !=

                        NativeEvent.BUTTON_RIGHT)

                return;


            // Prevent browser's own context menu from appearing

            event.getNativeEvent().preventDefault();

            event.getNativeEvent().stopPropagation();


            handleItemRightClickEvent(event);

        }

    });

}


private void handleItemRightClickEvent(CellPreviewEvent<T> event)

{

    NativeEvent nativeClickEvent = event.getNativeEvent();

    // Get the data (type T) that is being displayed in the cell

    // by the CellTable or DataGrid widget.

    T rowClicked = event.getValue();


    // Create PopupPanel for menu

    PopupPanel popup = ...


    // Show the popup menu at the click position

    UIObject target = new MousePointUIObject(nativelickEvent);

    popup.showRelativeTo(target);

}


private static class MousePointUIObject extends UIObject

{

    private NativeEvent mouseEvent;


    public MousePointUIObject(NativeEvent mouseEvent)

    {

        this.mouseEvent = mouseEvent;

    }


    @Override

    public int getAbsoluteLeft()

    {

        return mouseEvent.getClientX() + Window.getScrollLeft();

    }


    @Override

    public int getAbsoluteTop()

    {

        return mouseEvent.getClientY() + Window.getScrollTop();

    }


    @Override

    public int getOffsetWidth()

    {

        return 0;

    }


    @Override

    public int getOffsetHeight()

    {

        return 0;

    }

}


查看完整回答
反對 回復 2022-12-15
  • 3 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號