簡體   English   中英

如何創建對在循環中創建的對象的引用?

[英]How to create references to objects created in a loop?

我確定這個問題已經提出,但是我一生都找不到(在SO或Google上)。

如何最有效地創建對我在循環中創建的多個對象的引用? 在這種特定情況下,我使用Swing將JButton添加到GridLayout中。

int numOfButtons = 10;
for (int i = 0; i < numOfButtons; i++){
    add(new JButton("" + i));}

如果以后我想更改按鈕上的文本,我該怎么做? 說,如果我想更改8號按鈕:

buttonEight.setText("DO NOT CLICK!!!);

如何從buttonEight創建帶有8的按鈕引用?

我唯一想到的就是在循環之前創建一堆實例變量。 除了...嗯。 實際上,那是行不通的(我不認為)

可以做到這一點的事情:

JButton button8;
    for (int i = 0; i < numOfButtons; i++){

    button + i = new JButton(""+ i); 
    //like, if i = 8 then button + i gets me button8 to reference it or something?
    //obviously that doesn't work
    }

button8.setText("DO NOT CLICK!!!);

如果numOfButtons是變量,那么創建正確數量的實例變量也很麻煩。

我應該怎么做?

使用ArrayList:

ArrayList<JButton> list=new ArrayList<>();
int numOfButtons = 10;
for (int i = 0; i < numOfButtons; i++){
    JButton jb=new JButton("" + i);
    list.add(jb);
    add(jb);
}

稍后(假設您要更改第8個按鈕的文本(列表中為7)):

list.get(7).setText("...");

該列表僅創建對JButton對象的引用。 然后,對其所做的任何更改都會反映在UI上。

或者,如果您只想設置第八個按鈕的文本,則可以使用條件語句來選擇該按鈕:

for (int i=0;i<numOfButtons;i++) {
    if (i==7) {
        add(new JButton("DO NOT CLICK!");
    } else {
        add(new JButton(""+i);
    }
}

與使用ArrayList相比,這將節省程序中的內存空間。

暫無
暫無

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

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