2011-10-07 16 views
0

Swing使用Actions來跨多個GUI組件共享功能和狀態,如菜單項和toobar按鈕。 XUL在他們的Command框架中使用了類似的方法。在GWT中處理應用程序命令

在GWT中處理類似要求的典型/最佳方法是什麼?我特別感興趣的是顯示菜單項還是按鈕是啓用還是禁用。

回答

1

我使用Command類。 GWT MenuItems可以有一個與它們相關的命令。這裏有一些相關的代碼片段:

Command printCommand = new Command() { 
     @Override 
     public void execute() { 
     myEventBus.fireEvent(new PrintEvent()); 
     } 
    }; 

MenuItem print = new MenuItem(); 

print.setCommand(printCommand); 

請注意,您可能會導致printCommand通過調用printCommand.execute簡單地執行()。例如,您可以使用ClickHandler爲其調用printCommand.execute()的打印按鈕,因此它與上述代碼中的菜單項具有完全相同的效果。

現在我知道在Swing中,Action和Widget之間存在巧妙的交互,所以通過啓用或禁用Action可以同時啓用或禁用所有Widget。命令並沒有太緊密的聯繫在一起,我不認爲GWT中有像Swing中那樣的一類停止啓用/禁用功能。話雖如此,你也許可以擴展Command,以便以某種方式註冊使用該命令來激發該命令的小部件,並且該命令具有一個啓用方法,該方法在被調用時遍歷小部件列表,根據需要啓用和禁用它們。

+0

是的,Swing組件將自己註冊爲Action的PropertyListeners,因此可以反映對Action State的更改。如果我理解正確(我意識到這是脫離袖口:)),意味着設置某種類型的ActionManager,它維護一個Command集合和另一個映射類型結構,該結構使用命令名稱和小部件將命令映射到小部件IDS。 – user697750

+0

只要記住要平衡解決方案的成本與GUI的複雜性。如果你有十幾個不同的窗口小部件共享相同的動作,那麼這是有道理的。但是,如果操作只能通過一個或兩個小部件訪問,也許只是對啓用/禁用調用進行硬編碼。但是......如果你希望在未來的應用中反覆使用這個功能......那麼也許值得這樣做,即使這次只是爲了一些小部件而已。 –