簡體   English   中英

什么是java.awt.Component.getName()和setName()用於?

[英]What is java.awt.Component.getName() and setName() used for?

什么是java.awt.Component.getName()用於? 在我使用NetBeans構建的應用程序中,它似乎總是為null 我想在每個組件中存儲一些幫助文本 - 我不想使用工具提示,我有另一個面板,我將顯示幫助文本。

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

當在復合/父組件內以及AWT和Swing調試日志代碼中設置子組件的名稱時,getName()用於toString()方法。 我強烈懷疑某些AWT / Swing測試框架也使用了getName()方法。

因此,如果您不依賴於getName()的任何上述用法,您可以嘗試將其用於幫助消息,但我不建議使用它。

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

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

component.getName()方法主要用於偵聽器。 如果設置組件的名稱( component.setName(name) ),則可以從Listener的方法中調用該特定組件。

例:

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

請注意,您必須顯式設置組件的名稱,否則它將返回null

FEST使用Component的名稱在testcases中標識它。

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

我創建了一個名為HelpText.properties的資源包。 它包含名稱=值對。 我使用name = value對中的“name”setName()d我的每個組件。 然后我使用框架的getGlassPane()來捕獲所有鼠標移動。 當鼠標在命名組件上運行時,它會在包中查找名稱,顯示幫助(如果可用)並將鼠標移動轉移到實際組件。

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

我用它來處理一個單獨的類中的聽眾。 我作為參數接收包含我的object.addListener的組件,而不是作為容器,而是包含該對象的類。 感謝Vivavinyl首先設置名稱的提示。 這很有用,也很有用。

這是我使用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;

        }

    }

此外,由於我認為java.awt.Component是X中的重量級對象,xwininfo和xwd等程序可能允許您按名稱指定它。

我只是用JFrame嘗試過,而setName沒有設置窗口的名稱,窗口是由我在構造函數中傳遞的字符串命名的。 但是我沒有任何僅用於測試的示例代碼,所以我對上面寫的內容可能是錯的。

我已經搜索了許多獲得名稱的答案,我認為這是唯一簡單的解決方案

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM