2008-10-22 20 views

回答

20

Component.setName(..)在JDK中主要由外觀實現類用於爲每個組件設置類ID字符串,例如, BasicOptionPaneUI可能會在按鈕組件上調用它以將其名稱設置爲「OptionPane.button」。

的的getName()中的toString()中使用的方法,設置複合/父Component AWT內部和子組件和Swing調試記錄代碼的名稱時。 我強烈懷疑getName()方法也被一些AWT/Swing測試框架使用。

所以,如果你不依賴於任何的getName()的上述用途,您可以嘗試使用它的幫助信息,雖然我不會推薦它。

也許你應該重新考慮你的設計?使用該名稱在加載資源包中的幫助文本的散列映射中進行一些查找?

+0

謝謝赫爾曼 - 請參閱我的答案,瞭解我是如何做到的。 – JohnnyLambada 2008-10-22 21:56:04

6

我還沒有看到它用於框架的任何東西。如果您將組件傳遞給某個方法,那麼它很有用,因此您可以詢問其名稱以決定如何處理它們。此外,許多UI測試框架使用它來允許您在測試腳本中按名稱引用組件。雖然我沒有看到任何理由不能使用它來獲取幫助文本。

+3

我們使用它的機器人/ UI測試。 – 2008-10-22 19:41:47

+1

我們還將其用於機器人/ UI測試。 – Jason 2017-11-04 13:00:42

0

而且,因爲我覺得java.awt.Component中是X一個重量級的對象,像xwininfo和XWD程序可能允許您通過名字來指定。

我只是一個JFrame試了一下,和setName沒有設置窗口的名稱,該窗口是通過我在構造函數中傳遞的字符串命名。但是我沒有任何awt-only示例代碼來測試,所以我可能會錯在上面寫的內容。

1

Herman Lintvelt的答案最終成爲我的應用程序的正確答案。

我創建了一個名爲HelpText.properties的資源包。它包含名稱=值對。我使用名稱=值對中的「名稱」將每個組件的setName()d。然後我使用框架的getGlassPane()捕獲所有鼠標移動。當鼠標移過指定的組件時,它將在包中查找名稱,如果可用則顯示幫助,並將鼠標移動轉發到實際組件。

呼。只有2天左右的時間。我終於開始習慣到Java :)

+0

很高興我能幫到你。享受Java。 – 2008-10-22 21:58:23

2

component.getName()方法大多與聽衆使用。如果您設置組件的名稱(component.setName(name)),則可以使用Listener的方法調用該特定組件。

例子:

public void someMethodOfsomeListener(SomeEvent e){ 
    if (e.getComponent().getName().equals(component.getName()) 
     //do stuff... 
} 

請注意,你必須明確地設置組件的名稱,否則將返回null

+0

如果您在偵聽器中有`component`引用,那麼您也可以使用`e.getComponent()== component`,這個錯誤不太容易出錯。我會考慮使用多個監聽器。 – palacsint 2015-03-31 11:54:35

0

我用它來處理一個單獨的類中的監聽器。我收到作爲參數組件包含我的object.addListener不作爲容器,但作爲包含該對象的類。感謝Vivavinyl爲第一個設定名稱的提示。這是有用的和工作。

0

這是我使用的getName()爲:

Frame[] frames = JFrame.getFrames(); 

    for (int i = 0; i < frames.length; ++i) { 

     //get the frame 
     Frame frame = frames[i]; 

     if (frame.getName().equals(frameName)) { 

      //make the frame visible 
      frame.setVisible(true); 

      //focus the frame 
      frame.requestFocus(); 

      //found 
      return; 

     } 

    } 
2

FEST使用組件的名稱來標識它的測試用例。

-1

...我已經尋找越來越名字 很多答案,我認爲這是唯一的簡單的解決方案

public static void main(String[] args) { 
    ActionListener actionListener = new ActionListener() { 
     public void actionPerformed(ActionEvent actionEvent) { 
      String name = actionEvent.getSource().toString(); 
      UserReaction(ObjectName.getComponentVariableName(name), "null"); 
     } 
    }; 
    Button calculate_btn = new Button("Calculate"); 
    calculate_btn.setName("Calculate"); 
    calculate_btn.addActionListener(actionListener); 
} 

private static void UserReaction(String objectName) { 
    if (objectName.equals("Calculate")) { 
     //do something;   
    } 
}static public String getComponentVariableName(String name) { 
    String res = (name.substring(name.indexOf("[") + 1)); 
    res = res.split(",")[0]; 
    return res; 
}