下一代的B/S開發框架--Echo 教程(4) (轉)

worldblog發表於2007-12-12
下一代的B/S開發框架--Echo 教程(4) (轉)[@more@]

下一代的B/S開發--Echo 教程(4)

視窗的實現

熟悉的人都知道, 瀏覽器上很難實現模式視窗, 就是那種一直在最上面的子視窗並且能禁止對父視窗的操作. 在B/S中碰到這種問題一般都會返回一個新頁面, 然後用連結回到原來的頁面. 有時候新視窗中的資訊很少, 不得不想辦法來裝飾它. 我們看看用Echo怎麼做:

import nextapp.echo.*; import nextapp.echo.event.*; /** * 模式視窗 */ public class CommonWindow extends Window implements WindowListener { protected Window parent; //父視窗 public CommonWindow(Window parent, boolean modal){ this.parent = parent; if (modal && parent!=null) parent.setVisible(false); } public CommonWindow(){} protected void init(){ setDefaultCloseOperation(Window.DISPOSE_ON_CLOSE); addWindowListener(this); } //視窗被dispose()時 public void windowClosed(WindowEvent e) { if (parent!=null){ parent.setVisible(false); //啟用父視窗 parent.setVisible(true); } } public void windowClosing(WindowEvent e) {} public void windowOpened(WindowEvent e) {} }


來看看上面的程式碼:

  1. 父視窗在構造中就被隱藏
  2. 子視窗自己被銷燬的事件, 在被銷燬後啟用父視窗
  3. 如果視窗已經開啟, 僅僅對視窗setVisable(true)並不能使其可見, 所以先隱藏再開啟.

其它視窗一般擴充套件CommonWindow, 可以輕鬆實現小巧的alert/confirm視窗.

注意: EchoPoint裡面提供了一種基於層的模式視窗:DialogPanel. IE對層的支援比較差, 僅供參考.

作為其它視窗的父類, 一般還要在裡面設定視窗的預設字型/顏色/佈局, 以後只要調整CommonWindow就可以統一調整網站風格.

因為經常對視窗中所有按鈕用同一個事件監聽器, 所以CommonWindow中還增加這樣一個投機取巧的方法:

/** * 對下的所有按鈕增加相同的動作監聽器, 忽略checkbox和radioBox */ public static void addAllButtonListener(Component component,ActionListener listener){ Component[] all = component.getComponents(); for (int i = 0; i < all.length; i++) { if (all[i] instanceof AbstractButton && !(all[i] instanceof ToggleButton)) ( (AbstractButton) all[i]).addActionListener(listener); if (all[i] instanceof Component) addAllButtonListener(all[i],listener); } }


 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992389/,如需轉載,請註明出處,否則將追究法律責任。

相關文章