swing組件的name屬性的用途是什麼?它在內部使用嗎?擺動組件的名稱屬性是什麼?
背景:一位同事通過在name屬性中存儲文本字符串的關鍵字來實現國際化機制。然後,他只需遍歷所有擺動元素並獲取存儲在組件名稱屬性中的密鑰。他爭辯說,名稱財產似乎並沒有被使用,這是最簡單的方法。
swing組件的name屬性的用途是什麼?它在內部使用嗎?擺動組件的名稱屬性是什麼?
背景:一位同事通過在name屬性中存儲文本字符串的關鍵字來實現國際化機制。然後,他只需遍歷所有擺動元素並獲取存儲在組件名稱屬性中的密鑰。他爭辯說,名稱財產似乎並沒有被使用,這是最簡單的方法。
它在內部使用嗎?
簡答:是的。
較長的答案:相當容易驗證 - 只需構建一些用戶界面並漫步樹。或者看f.i.該SwingLabs-Demo(無法抗拒:-),
下一個問題是設置:這是否搖擺內部設置干擾設置應用程序的原因名稱?
簡短的回答:很難說,最有可能不是
較長的答案:我所見過的內部設置是不可能被覆蓋的應用需求,因爲它們深深地隱藏在容器層次結構。事實上,一些框架如f.i. SAF確實使用這個名字進行資源注入(類似於你描述你的同事所做的事情)。我自己的(未維護的)FormBuilder框架用於佈局約束。
的模糊(讀:未定義)name屬性的定義既是優勢,又是陷阱:
來自javadoc的組件名稱「設置或獲取組件的名稱。當需要將文本與不顯示文本的組件關聯時,這非常有用。」所以我覺得用這個名字很好。
你也可以在組件的屬性中放置一些東西。
對客戶端屬性+1。 – trashgod 2012-01-05 10:47:15
根據我的經驗,在設置Swing組件的名稱時我從未遇到任何問題。對於「葉子」Swing組件(您直接使用的組件,例如JLabel
,JButton
,JMenu
...),name
總是由Swing留下null
。
正如@kelopatra所提到的,「複雜」Swing組件的內部組件(例如JColorChooser
)可能會分配給它們的名稱,但通常不能直接訪問這些內部組件(除了遍歷copmponent層次結構樹之外)。
根據name
屬性的使用,它經常用於資源注入(i18n),但它對於UI自動化(用於測試或演示)也非常有用,因爲大多數機器人(例如FEST Swing)將會能夠按名稱查找組件,前提是您爲組件分配了唯一的名稱。
非常感謝您的詳細解答!我想我會這樣離開它,因爲它是一個相當小的應用程序,其他代碼干擾的風險不是太大。 – mort 2012-01-06 12:09:12