簡體   English   中英

引用動態創建的JButton

[英]Referring to a Dynamically Created JButton

我有一個JPanel,我在上面動態地添加了許多JButton。 所有這一切都運行良好。 稍后在程序執行中,我需要參考這些按鈕並拉出按鈕文本。 我在弄清楚如何參考他們時遇到了麻煩。

創建每個按鈕時,我給它指定了唯一的名稱。 假設這是我創建按鈕的代碼:

public void createButton(Container parent, String btnName) {
   JButton btn = new JButton("xyz");
   btn.setName(btnName);
   btn.addActionListner(new ActionListner() {
      //code
   }
   parent.add(btn);
 }

在另一種方法中,我試圖檢索按鈕上的標簽,因為它在運行時可能已更改。 創建這些按鈕時是否需要保留這些按鈕的數組? 還是有一種方法可以直接參考它們?

這是我正在研究的內容,但是很愚蠢。 誰能建議一個正確的方法?

public String getBtnLabel(String btnName) {
   JButton btn = (JButton) btnName;
   return btn.getText();
}

如果答案是我只需要創建數組然后對其進行迭代,那很好。 只是在尋找其他選擇。

您需要使用Map<String, JButton>因此當您創建動態按鈕時,您會給它們提供一些不確定的名稱:

//somewhere at the top of your class
private final Map<String, JButton> myButtonMap = new HashMap<>();

public void createButton(Container parent, String btnName) {
   JButton btn = new JButton("xyz");
   btn.setName(btnName);
   btn.addActionListner(new ActionListner() {
      //code
   }
   parent.add(btn);
   myButtonMap.put(btnName, btn);
 }

然后只需從地圖上獲取

public String getBtnLabel(String btnName) {       
   return myButtonMap.get(btnName).getText();
}

如果未定義按鈕,這顯然會引發NPE ...
另外,完成操作后還需要從地圖中刪除,否則會導致內存泄漏。

我建議您使用Map< String, JButton >

在創建時,您將帶有buttons.put( name, btn )新按鈕放入其中

在事件處理程序中,您可以使用JButton btn = buttons.get( name )

是的,您需要保留對按鈕的引用。 可以選擇使用數組,但是由於數組使用起來很尷尬,因此您應該使用列表。

如果您對包含這些按鈕的JPanel有一個引用,則可以從中獲取它們。 但這很麻煩。

我建議在地圖中保留您的按鈕列表或對它們的引用,但是您可以這樣做:

for (Component i : parent.getComponents()) {
    if (i.getName().equals(btnName)) {
         JButton b = (JButton) i;
         // do stuff..
    }
}

使用父組件並遍歷添加的組件。

暫無
暫無

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

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