2010-01-25 138 views
3

我該如何修改GWT菜單 - 灰掉某些條目,根據我的應用程序狀態在其他條目旁邊勾選複選標記?動態GWT菜單

我的應用程序在頂部有一個菜單欄 - 文件,編輯,視圖,插入,格式等。我有許多段落,每個段落可以有不同的格式。當用戶點擊格式時,我想要格式菜單在menuItem旁邊顯示一個對應於當前所選段落格式的複選標記。如果某些格式對於當前選定的段落不合適,我想將這些菜單項灰掉。

主要問題是何時進行更新:(a)單擊格式菜單按鈕時,或(b)每當我的用戶選擇一個新段落時?

我覺得選項(一)更吸引人。但是,我怎麼能檢測到這一點? MenuItem沒有任何添加事件偵聽器的功能。它可能是我需要的一個mouseClick,但它可能是一個mouseOver:如果用戶單擊插入菜單項,插入菜單將出現,但如果鼠標移動到格式上,則會出現格式菜單。

選項(b)聽起來更簡單,但會浪費更多的處理器時間。

對於我的contextMenu(右鍵單擊該段落),它更容易,因爲菜單隻有在發生右擊時才構造。

我已經使用平方根符號(&#8730)打勾。有誰知道更好的方法?我需要使用HTML並使用「 簡單格式」作爲我的菜單項嗎?

最後,有沒有辦法禁用(變灰)菜單項,以便它不能被選中?

回答

1

從節約資源的角度來看,選項(a)聽起來更好。

而不是使用平方根符號,爲什麼你不使用圖像(使用com.google.gwt.user.client.ui.Image類)?

我認爲一個更優雅/簡單的解決方案可能是爲您的菜單項使用複選框類。這樣,您可以自動進行勾選/檢查,而不必使用圖像或平方根符號。此外,您還可以通過setEnabled(false)「變灰」項目。否則,您將不得不編寫自己的小部件或將自己的功能添加到菜單標籤中,以便「灰化」項目。

+0

感謝普羅米修斯。我看不到如何使用Text以外的其他任何東西(可能是HTML)製作MenuItem。例如,我想用複選框和標籤製作一個Panel,但GWT似乎沒有提供。另外,我可以在MenuItem上看到任何setEnable()選項。我不是在正確的地方看嗎? – John 2010-01-25 21:17:26

+1

啊,我在想,你可以製作自己的菜單,而不是使用MenuItem/MenuBar。如果您想使用MenuBar,我會使用html創建MenuItem(包括使用標記的複選框),並可能更改字體顏色以指示是否未啓用項目。您可以擴展MenuItem/MenuBar類來添加一些簡單的方法,以便您更改是否選擇或啓用對象。作爲最後的手段,您可能需要查看Smart GWT庫(http://www.smartclient.com/smartgwt/showcase/#main),因爲它具有許多您正在尋找的功能。 – 2010-01-25 23:27:23