gpt4 book ai didi

java - 添加带有循环的 Action 监听器,索引越界错误

转载 作者:行者123 更新时间:2023-11-30 03:09:19 25 4
gpt4 key购买 nike

我正在使用循环向 5 个项目添加一些监听器。我收到 OOB 错误,我知道原因,但不知道如何修复它。

这是代码:

int i;//class variable

...

for(i = 0; i < fonts.length; i++){//both fonts and fontItemList are the same size: 5

fontItemList[i] = new JMenuItem(fonts[i]);
fontItemList[i].addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){
editor.setFont(new Font(fonts[i], 0, 12));//error occurs here
}

});
}

我收到错误的原因是因为监听器仅在用户单击该项目时执行,但是到那时,i = 5,这是我的列表的大小,导致 OOB 错误。

此代码的作用是创建 5 个 JMenuItem 对象,这些对象将在按下相应的 JMenuItem 时更改字体。

最佳答案

您不应在此处使用类变量(字段)i,因为它对于每个监听器都是相同的。您真正需要的是捕获字体:

for(int i=0 ; i<fonts.length; i++) {
final String font = fonts[i];
fontItemList[i] = new JMenuItem(font);
fontItemList[i].addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){
editor.setFont(new Font(font, 0, 12));
}

});
}

这样每个听众都会获得自己的字体。在匿名类中,您可以捕获 final 局部变量(从 Java-8 开始,如果您实际上不更改变量,则可以省略 final 关键字)。在匿名类的对象中,它始终具有与对象创建期间相同的值。

关于java - 添加带有循环的 Action 监听器,索引越界错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33966875/

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