2012-01-05 57 views
8

swing組件的name屬性的用途是什麼?它在內部使用嗎?擺動組件的名稱屬性是什麼?

背景:一位同事通過在name屬性中存儲文本字符串的關鍵字來實現國際化機制。然後,他只需遍歷所有擺動元素並獲取存儲在組件名稱屬性中的密鑰。他爭辯說,名稱財產似乎並沒有被使用,這是最簡單的方法。

回答

3

它在內部使用嗎?

簡答:是的。

較長的答案:相當容易驗證 - 只需構建一些用戶界面並漫步樹。或者看f.i.該SwingLabs-Demo(無法抗拒:-),

  • 點擊JXTree演示任務,並看到一個簡單的JFrame的一些孩子的名字,通過搖擺(在樹節點顯示,括號)設置。
  • 變化LAF到雨雲,點擊JXTreeTable演示任務,將鼠標移動到該treetable中的滾動條,看到滾動按鈕的名稱由LAF

下一個問題是設置:這是否搖擺內部設置干擾設置應用程序的原因名稱?

簡短的回答:很難說,最有可能不是

較長的答案:我所見過的內部設置是不可能被覆蓋的應用需求,因爲它們深深地隱藏在容器層次結構。事實上,一些框架如f.i. SAF確實使用這個名字進行資源注入(類似於你描述你的同事所做的事情)。我自己的(未維護的)FormBuilder框架用於佈局約束。

的模糊(讀:未定義)name屬性的定義既是優勢,又是陷阱:

  • 廣告:是的,任何代碼都可以使用它,它並沒有真正的合同
  • 陷阱:可能有很多該屬性的競爭用戶
+0

非常感謝您的詳細解答!我想我會這樣離開它,因爲它是一個相當小的應用程序,其他代碼干擾的風險不是太大。 – mort 2012-01-06 12:09:12

8

來自javadoc的組件名稱「設置或獲取組件的名稱。當需要將文本與不顯示文本的組件關聯時,這非常有用。」所以我覺得用這個名字很好。

你也可以在組件的屬性中放置一些東西。

+2

對客戶端屬性+1。 – trashgod 2012-01-05 10:47:15

2

根據我的經驗,在設置Swing組件的名稱時我從未遇到任何問題。對於「葉子」Swing組件(您直接使用的組件,例如JLabel,JButton,JMenu ...),name總是由Swing留下null

正如@kelopatra所提到的,「複雜」Swing組件的內部組件(例如JColorChooser)可能會分配給它們的名稱,但通常不能直接訪問這些內部組件(除了遍歷copmponent層次結構樹之外)。

根據name屬性的使用,它經常用於資源注入(i18n),但它對於UI自動化(用於測試或演示)也非常有用,因爲大多數機器人(例如FEST Swing)將會能夠按名稱查找組件,前提是您爲組件分配了唯一的名稱。