請允許我解釋我正在嘗試做什麼 - 我認爲標題可以粗略地解釋它,但我不太確定我是否正在處理事情如果我錯了,請糾正我的錯誤!將函數作爲字符串傳遞的正確方法
我使用LayeredPane
創建了自定義對話框。基本上jPanel
顯示在POPUP_LAYER
上,因此出現在主要內容的頂部。此面板包含一個簡單的'label-textbox-okay-cancel'控件組。我將這稱爲'對話框面板'。
我是什麼要做: 當單擊主窗口(包含在LayeredPane
內)上的按鈕時,對話框面板將出現,並允許用戶輸入一些文字,然後點擊確定或取消。這很簡單,但我希望此代碼可以重複使用,這意味着主窗口上的其他按鈕將調用相同的對話框面板,但標籤中的文本不同。
這當然要求我包含某種回調函數,以便Dialog Panel上的okay按鈕將根據調用它的按鈕來運行正確的代碼。
我目前的嘗試是存儲一個字符串,其中將包含當用戶單擊對話框面板上的OK按鈕時應運行的功能的名稱。我試圖檢索這個字符串並將其轉換爲函數名稱,到目前爲止,我已經找到許多對「反射」的引用,其中許多提示它不是一個好主意。
在我一直無法得到任何示例代碼的工作,因爲我不明白什麼是「OBJ」是在下面的代碼,但無法調用的方法無論如何:
method = obj.getClass().getMethod(myCallbackString);
我的問題是:
首先,我是否正在以正確的方式進行?我更願意接受建議,但請儘量保持簡單,因爲我真的剛剛開始!
其次,上面顯示的代碼中的'obj'是什麼?我真的很想知道,即使這不是我應該做的事情!
我的其他想法包括:我的Dialog Panel是否應該在它自己的類中,如果是,再次如何傳遞迴調函數?
任何幫助或建議將受到感謝。
順便說一句:回答「爲什麼不使用正常對話框?」的問題。我只能說我目前正在試驗,而我只是想看看我能否做到這一點!
MVK
'getMethod'只有在方法公開的情況下才能使用。如果它是私人的,你需要使用'getDeclaredMethod'。獲取方法後,需要調用它:'method.invoke(obj,anyParameters)',其中obj是要調用該方法的對象。 – 2012-07-08 13:03:23
我認爲使用'switch'語句選擇要調用的方法可能更明智。 – 2012-07-08 13:09:25