我确定已经问过这个问题,但我一生都找不到(在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是变量,那么创建正确数量的实例变量也很麻烦。
我应该怎么做?
答案 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
相比,它将节省程序中的内存空间。