我看过很多网站.如果没有面板,标签会正确显示,面板会显示错误:
Exception in thread "main" java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
那么我该怎么做才能解决这个问题呢?
这是源代码:
JLabel button[] = new JLabel[100];
JPanel[] panel = new JPanel[100];
for (int i = 0; i < button.length; i++) {
a = a + 50;
if (a > 549) {
b = b + 50;
a = 50;
}
button[i] = new JLabel("hi");
frame.add(button[i]); //is this necessary?
button[i].setVisible(true); // is this necessary?
button[i].setSize(50,50);
panel[i].add(button[i]);
panel[i].setVisible(true);
panel[i].setBounds(a, b, 50, 50);
frame.add(panel[i]);
}
Run Code Online (Sandbox Code Playgroud)
这有什么不对,怎么解决呢?只是你知道,它应该有100个标签,在10乘10阵列中说你好.这是它的样子:

创建JPanel仅创建数组的数组.它不会创建任何JPanel填充数组.因此,阵列充满了nulls.您必须为数组的每个元素创建一个JPanel:
panel[i] = new JPanel();
panel[i].add(button[i]);
Run Code Online (Sandbox Code Playgroud)
此外,组件可能只有一个祖先.必须将按钮添加到框架或面板,但不能同时添加到两者.如果您想要面板中的按钮,则必须将其添加到面板中.
默认情况下,组件是可见的(除了必须使其可见的框架或对话框之类的顶级组件除外).你不需要打电话button.setVisible(true).
您肯定应该学会使用布局管理器,而不是明确地设置组件的大小和范围.这是拥有漂亮,便携的GUI应用程序的唯一方法.阅读http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html