[英]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.