提问人:Jonas 提问时间:3/22/2022 最后编辑:Jonas 更新时间:7/7/2022 访问量:52
Java Swing NullPointer Exeption 同时添加按钮 [Duplicate]
java swing nullpointer exeption whilst adding buttons [duplicate]
问:
所以我试图为一个学校项目做一个 java-swing-gui,因此我必须将 72 个按钮 (idk) 添加到 JPanel 元素中。 我尝试使用for循环:
for (JButton btn : btns) {
panel.add(btn);
}
但它并没有真正奏效并抛出一个 nullPointerExeption。 有什么建议吗?
以下是完整代码:
import javax.swing.*;
import javax.swing.plaf.DimensionUIResource;
import java.awt.*;
public class mädn extends JFrame{
static JPanel panel = new JPanel();
static JFrame frame = new JFrame();
static JButton[] fields = new JButton[72];
public static void main(String[] args) {
new mädn();
}
public mädn() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new DimensionUIResource(500, 500));
frame.setTitle("Mensch Ärger Dich Nicht");
panel.setLayout(new GridLayout(11, 11));
panel.setBackground(Color.blue);
for (JButton field : fields) {
field.setSize(20, 20);
panel.add(field);
}
frame.add(panel);
frame.setVisible(true);
}
}
答:
1赞
SMMH
3/22/2022
#1
当您创建如下所示的数组时:
static JButton[] fields = new JButton[72];
该数组为空。换句话说,即使该数组能够保留 72 个按钮,它还没有这些按钮,您必须手动添加它们,如下所示:
for (int i = 0; i < 72; i++) {
fields[i] = new JButton();
}
但是,如果您不这样做,则默认情况下将是,因此当您尝试这样做时,该字段为 null,并且会导致 .fields[i]
null
field.setSize(20, 20)
NullPointerException
基元数组也有默认值。例如,数组的元素是 all,数组的元素是 all 。对于非原始数组(like )也是如此,这些元素都是默认的。int
0
boolean
false
JButton
null
最终代码如下所示:
for (int i = 0; i < 72; i++) {
fields[i] = new JButton();
fields[i].setSize(20, 20);
panel.add(fields[i]);
}
艺术
for (int i = 0; i < 72; i++) {
JButton field = new JButton();
fields[i] = field;
field.setSize(20, 20);
panel.add(field);
}
甚至更短:
for (int i = 0; i < 72; i++) {
var field = fields[i] = new JButton();
field.setSize(20, 20);
panel.add(field);
}
还可以考虑将其转换为常量(字段)。72
static final
评论
1赞
Jonas
3/23/2022
非常感谢SMMH,帮助我解决了这个问题
0赞
SMMH
3/23/2022
@JonasHaardoerfer没问题,伙计,你能把我的答案指定为正确答案,让它得到一个绿色的复选标记吗?
评论
null
setSize