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

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

如何防止使用GWT亂添加控件?

如何防止使用GWT亂添加控件?

阿波羅的戰車 2024-01-25 21:32:15
我在應用程序中使用 GWT 創建兩個具有相同按鈕的面板。例如,兩個面板 PanelFirst 和 PanelSecond 有兩個類,還有一個按鈕 MyButton 的類,單擊后顯示警報。我向兩個面板添加一個按鈕,并期望看到一個包含兩個面板的頁面,每個面板上都有相同的按鈕。但我得到兩個面板,其中 PanelFirst 為空,PanelSecond 有兩個重疊的按鈕(按鈕看起來像一個按鈕,當我單擊它時,我收到兩個警報,在 html 的 DevTool 中,我看到兩個按鈕放置在同一位置)。為什么會發生這種情況?根本原因是異步js嗎?我該如何解決這個問題?為了更好地理解我,我附上了一個代碼示例(這不是真正的代碼。這只是常見的示例)。class PanelFirst {   private static Button myFirstButton = new Button();   private static FlowPanel firstPanel;   public PanelFirst (){};   public FlowPanel createPanelFirst(){     firstPanel = new FlowPanel();     myFirstButton = MyButton().createMyButton();     firstPanel.add(myFirstButton);     return firstPanel;   }   }class PanelSecond  {   private static Button mySecondButton = new Button();   private static FlowPanel secondPanel;   public PanelSecond(){};   public FlowPanel createPanelSecond(){     secondPanel= new FlowPanel();     mySecondButton = MyButton().createMyButton();     secondPanel.add(mySecondButton);     return secondPanel;   }   }class MyButton {   private static Button mySecondButton = new Button();   public MyButton(){};   public Button createMyButton(){     mySecondButton.addClickHandler(new ClickHandler() {            @Override            public void onClick(ClickEvent event) {                createAlert("I'm button");            }        });     return mySecondButton;   }   }
查看完整描述

1 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

好吧,您基本上是在 2 個面板中添加相同的按鈕 2 次,并向ClickHandler其中添加 2 。您需要像這樣更改您的代碼:


首先將您的方法更改createMyButton為靜態方法并在那里創建一個新對象


class MyButton {


    public MyButton(){};


    public static Button createMyButton(){

        MyButton button = new MyButton();

        button.addClickHandler(new ClickHandler() {

            @Override

            public void onClick(ClickEvent event) {

                createAlert("I'm button");

            }

        });

        return button;

    }   

}

現在您可以在面板中使用它:


class PanelFirst {


    private static FlowPanel firstPanel;


    public PanelFirst (){};


    public FlowPanel createPanelFirst(){

        firstPanel = new FlowPanel();

        firstPanel.add(MyButton.createMyButton());

        return firstPanel;

    }   

}


class PanelSecond  {

    private static FlowPanel secondPanel;


    public PanelSecond(){};


    public FlowPanel createPanelSecond(){

        secondPanel= new FlowPanel();

        secondPanel.add(MyButton.createMyButton());

        return secondPanel;

    }   

}


查看完整回答
反對 回復 2024-01-25
  • 1 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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