gpt4 book ai didi

java - 添加稍后在 arraylist 或 array 中使用循环初始化的变量

转载 作者:行者123 更新时间:2023-12-02 03:30:52 27 4
gpt4 key购买 nike

我的问题是,如何将稍后在程序中初始化的变量添加到带有循环的数组或数组列表中。

Example:

JButton btn1, btn2, btn3;
...
private void createIco(){
btn1 = new JButton(ico1); // ico1 is a ImageIcon-Object
btn2 = new JButton(ico2);
btn3 = new JButton(ico3);
}
// so i have now the instances of the buttons and now i want them store with
// a loop in a array or arraylist.
private void createBtnArray(){
// here a array
JButton[] buti = new JButton[3];
//how i can store them ? which loop is good or is this the wrong way to
//do ?
}

已编辑:到目前为止,谢谢。

是的,创建一个数组并使用该数组可以正常工作。全部由我亲手完成,效果也很好,哈哈。但我的观点更像是这样的:

假设我用这样愚蠢的方式制作了许多对象:

public class Test extends JFrame {

private BufferedImage cImg, cImg1, cImg2 cImg3 ............
private ImageIcon ico1, ico2, ico3, ico4, ...............
private JButton btn1, bnt2, btn3, btn4, ................
...........

public Test(){
initUI();
}

private void initUI(){
// this methods will initialize all objects above
loadImg();
cropImg();
createIcon();
createButton();
...............
createArray1();
}

public static void main(String[] args){
Test start = new Test();
}

现在我知道我可以重新制作所有内容并使用数组而不是单个对象,我做到了并且它有效。但我认为这是双重工作,因为我已经制作了它们,并认为通过一个简单的循环我可以将所有内容放入数组或列表或其他什么中,然后仅使用此数组对象来获取其他对象。

我的愿望是: JButton[] btnAll = new JButton[100];然后用循环得到我之前在程序中创建并使用 createArray1() 的所有实例,即使我不知道它们到底在哪里初始化。我只知道它们是制造出来的。

我的下一步是,我想将所有这些数组再次放入对象数组中,以便仅从 1 个点进行访问。像这样:Object[] all = new Object[3];所有[0] = btnAll;所有[1] = icoAll;全部[2] = imgAll;

所以我最终想要的看起来像这样:JButton test = all[0[2]];

所以我只能调用打包版本。

PS:是的,我会再次查看数组、列表等教程,看看是否能在那里找到它

最佳答案

如果您有像 btn1, btn2 这样的单独变量等等,你不能使用循环(或者至少它不会很容易并且没有多大意义)。只需正常添加即可,例如:

buti[0] = btn1;
buti[1] = btn2;
buti[2] = btn3;

或者直接初始化数组:

JButton[] buti = new JButton[3]{ btn1, btn2, btn3 };

但是,您也可以考虑仅使用数组,即删除 btn1等并使用buti[0]反而。然后你可以像这样初始化它:

JButton[] buti;

private void createIco(){
buti = new JButton[3];

buti[0] = new JButton(ico1); // ico1 is a ImageIcon-Object
buti[1] = new JButton(ico2);
buti[2] = new JButton(ico3);
}

或者最好也传递一组图标:

private void createIco(ImageIcon... icons ){

//initialize as many buttons as are available but only up the the number of icons passed
int l = Math.min( buti.length, icons.length );

for( int i = 0; i < l; i++ ) {
buti[i] = new JButton( icons[i] );
}

//if there are still buttons missing initialize them without icons
for( int i = l; i < buti.length; i++ ) {
buti[i] = new JButton( );
}
}

编辑:

您可能还想考虑使用List<JButton>而不是数组(如果你在某处读到 Vector<JButton>:不要使用它,直到你明白为什么它仍然可用)。以下是列表相对于数组的一些优点:

  • 列表可以增长,即您不必在开始时定义最大元素数。
  • 您可以查询列表的大小,即检查列表当前包含多少个项目。对于数组,您只能知道有多少个“槽”,但如果不检查所有元素,您不知道有多少个“槽”不为空,而对于列表,您只能添加非空元素,然后检查大小。
  • 使用列表添加和删除元素而不产生“漏洞”会更容易,因为实现可以处理这一点。
  • 如果您使用界面List<JButton>您可以根据需要替换实际的实现(即从 LinkedList 切换到 ArrayList 并返回)
  • 每当 Collection 时,您都可以使用列表。是允许的。

列表的一个缺点是它们不能与 int 等基元一起使用。开箱即用,但有一些库提供 IntList等等来处理这个问题。

关于java - 添加稍后在 arraylist 或 array 中使用循环初始化的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38117700/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com