如何创建对在循环中创建的对象的引用?

时间:2019-05-31 00:11:54

标签: java

我确定已经问过这个问题,但我一生都找不到(在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的按钮的引用?

我唯一能想到的就是在循环之前创建一堆实例变量。除了...嗯。实际上,那是行不通的(我不认为)

可以做到这一点的东西

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是变量,那么创建正确数量的实例变量也很麻烦。

我应该怎么做?

2 个答案:

答案 0 :(得分:1)

使用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对象的引用。然后,对其所做的任何更改都会反映在用户界面上。

答案 1 :(得分:0)

或者,如果您只想设置第八个按钮的文本,则可以使用条件条件来选择该按钮:

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

与使用ArrayList相比,它将节省程序中的内存空间。