2009-07-30 53 views
6

一個喊出來的鞦韆大師在那裏!動作命令vs動作類?

我已經做了好幾年Swing編程,但一直對這個不清楚。

如你所知搖擺/ AWT爲您提供了多種方法是單擊按鈕時執行特定的操作。我已經在我所從事的應用程序中看到了幾種不同的方式。我目前工作的項目往往採用這種做法:

someButton.setActionCommand("mycommand"); 
someButton.addActionListener(listener); 

--snip--

public void actionPerformed(ActionEvent event) { 
    String command = event.getActionCommand(); 
    if (command.equals("mycommand")) 
     doThis(); 
    else if (command.equals("someothercommand")) 
     doThat(); 
etc. 

這似乎有點笨拙,我 - 是有沒有這種編程風格的任何好處,還是使用Swing Action s更好?

或者是在不同的方法更好/更差有不同的情況?

+0

我認爲你只需要用你的自由裁量權來決定何時適合。我認爲沒有任何正確或錯誤,它只是程序員個人偏好的許多事情之一,但像Brandon說的,如果你使用多個按鈕來做同樣的事情,那麼使用一個動作是有意義的聽衆! – Andy 2011-11-28 17:24:32

回答

4

IMO,最好是使用單獨的偵聽器操作。

這樣,你離開的應該發生什麼處分,擺動委派。您不必比較字符串來決定要做什麼。

有一個巨大的ActionListener超過一個動作感覺像圖案的損壞給我。

+1

此外,它允許在動作監聽器中的代碼更大,或者讓代表團在內部保持。我相信使用命令元素的主要原因是,如果有不同的命令可能導致同一組件外的操作。然而,從我的頭頂來看,我想不出Swing/AWT所固有的一個。 – aperkins 2009-07-30 18:49:28

3

從設計的角度來看,我認爲這是最好有一個類來處理,而不是一個類,它是一個組件一個具體的行動「讓一切都處理所有組件在這裏」類型的設計。如果您使用Action,則可以:a)將其應用於多個組件(例如按鈕和菜單項); b)調用setEnable以啓用/禁用其所連接的所有組件; c)也可以使用此組件它可以定義其所附組件的各種設置(即文本標籤,工具提示文本,加速鍵,圖標等)。這最後一個是通過putValue方法來完成,並再次調用此方法將改變設置,其連接到所有組件。

具體而言,我會建議子類AbstractAction滿足您的需求。

0

其有用的,如果你有一個執行相同的操作幾個按鈕或部分(即在同一頁上幾個退出按鈕將使用相同的代碼)

他們都設置爲相同的動作指令,他們將所有使用相同的代碼在聽者

JButton.addActionListener(this); 
JButton2.addActionListener(this); 
JButton.setActionCommand("exit"); 
JButton2.setActionCommand("exit"); 

public void ActionPerformed(ActionEvent e){ 
    if(e.getActionCommand=="exit") 
     System.exit(0); 
} 
+0

不,如果他們執行相同的動作...給他們相同的動作監聽器....不需要命令字符串 – jjnguy 2009-07-30 18:46:50

1

我知道這是演示代碼,但因爲你是這個東西,我想我會提到,擺動工作趨向,如果你不小心,要真正重複。

使用Action類往往讓你更好的重構。在swing中,啓動最好的方法之一是確保NO字符串在你的代碼中。幾乎每一個「新」將是某種形式的循環,從集讀取(通常情況下,數據集是一個數組一樣簡單) - 一旦你開始從這樣一個數據集閱讀,動作可以幫助你很多。

您使用數據來創建您的動作,創建控件的數據以及將這兩者關聯的數據 - 以這種方式,您可以最終得到非常接近(或在)0行代碼的新控件。

一旦你開始編程這種方式,並可以看到模式,它至少像重複的方式一樣快,更不容易出錯。