我用Java编程,而且还很新 . 尝试使用GUI Basics,我决定制作一个棋盘,其中所有64个单元格都是JButton实例,背景为填充 . 可悲的是,当我尝试编译代码时,只显示了两个按钮,并且它们都没有着色 . 我试图理解这个问题,但现在看起来有点超出我的想法 .
package checkerboard;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.*;
public class Checkerboard extends JFrame {
public Checkerboard() {
JButton black = new JButton("B");
JButton white = new JButton("W");
black.setBackground(Color.BLACK);
white.setBackground(Color.WHITE);
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(8, 8));
p1.setSize(600, 600);
for (int i = 0; i < 8; i++) {
if (i % 2 == 0) {
for (int j = 0; j < 4; j++) {
p1.add(black);
p1.add(white);
}
} else {
for (int j = 0; j < 4; j++) {
p1.add(white);
p1.add(black);
}
}
}
super.add(p1);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Checkerboard frame = new Checkerboard();
frame.setTitle("Checkers");
frame.setSize(600, 600);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
在试验JPanel时,由于一些奇怪的原因,第27行有一个NullPointer异常 .
2 回答
这是因为您只使用JButton的一个实例对象作为黑色按钮,并且只使用JButton的一个实例对象作为白色按钮,并且您将越来越多地添加相同的2个引用到JPanel p1 . 因此,这不起作用,您需要为电路板上的每个按钮创建一个对象 . 以下是你如何做这样的事情:
然后你可以像这样添加它们:
问题是黑色和白色是JButton对象,你不能多次将相同的对象添加到JPanel .
每次添加时都需要创建一个新的JButton . 您可以在循环中动态实例化它们 .
只需添加一个方法即可 .