<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java JavaScript Web2.0

    WWW World, Jack's World
    posts - 9, comments - 28, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) ::  :: 聯(lián)系 :: 聚合  :: 管理

    GWT1.4中,PopupPanel的顯示與布局

    Posted on 2007-08-29 17:51 Jack L 閱讀(1390) 評(píng)論(1)  編輯  收藏 所屬分類: JavaScript
            在老版GWT中,PopupPanel有兩個(gè)構(gòu)造函數(shù):
                public PopupPanel();
                public PopupPanel(boolean autoHide);
            實(shí)例化我們的PopupPanel之后,可以設(shè)置顯示的位置,然后調(diào)用show()顯示。但是這樣只能得到一個(gè)模態(tài)(modal)Panel,只要它處于可見(jiàn)(isVisible()返回true)狀態(tài),我們的頁(yè)面就不能進(jìn)行任何操作(除了已經(jīng)運(yùn)行起來(lái)的JS代碼,像發(fā)送Ajax請(qǐng)求這樣的后臺(tái)操作),相當(dāng)與整個(gè)Web應(yīng)用因?yàn)?/SPAN>顯示該P(yáng)anel而進(jìn)入了暫停狀態(tài)。
            由于PopupPanel可以根據(jù)位置參數(shù)出現(xiàn)在頁(yè)面任何地方,所以很適合于實(shí)現(xiàn)諸如頁(yè)面角落上的提示框(比如在頁(yè)面右上角顯示“loading...”)等類似的小功能。但是這樣的提示框不能暫停瀏覽器的運(yùn)行,所以應(yīng)該是一個(gè)非模態(tài)(non-modal)的Panel。于是我們通過(guò)一種方式來(lái)繞過(guò)沒(méi)有適當(dāng)構(gòu)造函數(shù)的限制:
            使用RootPanel.get().add(myPanel);來(lái)取代myPanel.show();
            這樣就得到了一個(gè)非模態(tài)的Panel。

            在新的GWT1.4中,PopupPanel有三個(gè)構(gòu)造函數(shù):
                public PopupPanel();
                public PopupPanel(boolean autoHide);
                public PopupPanel(boolean autoHide, boolean modal);
            我們看到,我們可以通過(guò)構(gòu)造函數(shù)指定是否需要一個(gè)模態(tài)Panel。如果我們使用第三個(gè)構(gòu)造函數(shù),而且把第二個(gè)參數(shù)設(shè)置為false的話,當(dāng)我們對(duì)該P(yáng)opupPanel實(shí)例調(diào)用show()方法的時(shí)候,就會(huì)得到一個(gè)非模態(tài)的Panel。
            但是,如果我們還要用RootPanel.get().add(myPanel)的話,瀏覽器將忽略我們?cè)O(shè)置的寬度,和彈出位置等信息,把myPanel添加到頁(yè)面最下方一個(gè)元素的下面,而且其寬度與瀏覽器客戶區(qū)的寬度相同。總之,絕不是你想要的結(jié)果。

            下面給出一個(gè)在頁(yè)面右上角實(shí)現(xiàn)消息提示框的方法。
     1 private final PopupPanel infoB=new PopupPanel(false,false);//no auto-hide, non-modal popup
     2 public void infoBoard(String info){
     3          if(infoB!=null)
     4              infoB.hide();    
     5          Label lb=new Label(info);
     6          infoB.setWidget(lb);
     7          infoB.show();
     8          int width=infoB.getOffsetWidth();
     9          infoB.hide();
    10         int clientWidth=Window.getClientWidth();
    11         infoB.setPopupPosition(clientWidth-width, 0);
    12         infoB.show();
    13 }
            基本思路是,先設(shè)置要顯示的消息(info),然后因?yàn)槭窃谟疑辖秋@示,所以要取得消息框的寬度(width),并取得瀏覽器客戶區(qū)的寬度(clientWidth),計(jì)算(clientWidth-width)就得到了消息框的x坐標(biāo)(準(zhǔn)確地說(shuō)是左上角那一點(diǎn)的x坐標(biāo))。
            7~9的代碼好像很奇怪,但只有這樣才能取得消息框的寬度。當(dāng)PopupPanel處于不可見(jiàn)狀態(tài)時(shí),調(diào)用getOffsetWidth()必將返回0。因?yàn)闉g覽器不知道寬度。原因如下:
            你的PopupPanel可能會(huì)被CSS修飾,可能通過(guò)百分比設(shè)置了寬度,也可能設(shè)置了邊框等屬性,所以無(wú)法得知到底占用了多少個(gè)像素的寬度。只有處于可見(jiàn)狀態(tài)時(shí)才能得到其寬度。

    評(píng)論

    # GWT1.4中,Popup【示與布局  回復(fù)  更多評(píng)論   

    2012-05-28 15:26 by ff
    ffff
    主站蜘蛛池模板: 亚洲欧洲日产国产综合网| 自拍偷自拍亚洲精品被多人伦好爽| 日韩在线视频线视频免费网站| 国产成A人亚洲精V品无码性色| 国产真实伦在线视频免费观看| 99视频在线免费看| aa级毛片毛片免费观看久| 美女被吸屁股免费网站| 精品国产日韩亚洲一区在线| 亚洲第一区二区快射影院| 亚洲人成网站在线观看播放青青| 亚洲av永久无码精品网站| 国产亚洲精品一品区99热| 亚洲一区二区三区在线观看精品中文| 又粗又硬又大又爽免费视频播放| 免费a级毛片18以上观看精品| 好大好硬好爽免费视频| 黄页网站在线看免费| 免费无码又爽又刺激高潮| 四虎影视免费在线| 亚洲国产一区明星换脸| 国产亚洲精久久久久久无码77777| 国产精品亚洲精品日韩已方| 亚洲成AV人片在WWW色猫咪 | 亚洲国产超清无码专区| 亚洲免费视频网址| 国产亚洲美女精品久久| 免费91麻豆精品国产自产在线观看| 野花香高清在线观看视频播放免费 | 真人无码作爱免费视频| 国产午夜精品免费一区二区三区| 免费h片在线观看网址最新| 国产成人免费a在线资源| 久热综合在线亚洲精品| 亚洲精品国产高清在线观看| a级片在线免费看| 在线观看免费国产视频| 亚洲美女色在线欧洲美女| 国产成人亚洲综合a∨| 欧洲乱码伦视频免费| 国产a v无码专区亚洲av|