我正在设计一个计算器控制台,它将接收两个值,创建一个AdditionProblem类的新实例,它将返回问题的2个加数的JLabel数组,总和以及从每个地方携带的数量(它显示了工作)。我有一个自定义类,它扩展了JPanel和一个JPanels的ArrayList,它们代表了单击添加按钮后Solved问题的每一行。 AdditionProblem类和Main类一样正常。在我创建控制台类以显示答案后单击添加按钮时,我在第44行" row.add(新JPanel)"上得到空指针异常。如果您需要查看我的其余代码,请告诉我,我会发布它但是为了节省时间,我将发布Console类,因为其他类已经正常工作,直到我将代码移到此类。
package Main;
import java.awt.Color;
import java.awt.Dimension;
import java.util.ArrayList;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import Aritmathic.AdditionProblem;
public class Console extends JPanel {
private int width = 230, height = 260;
private ArrayList<JPanel> rows;
private ArrayList<JLabel> columns;
private void init(){
this.setPreferredSize(new Dimension(width, height));
this.setBackground(Color.WHITE);
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
}
public Console(){
init();
}
public void printAnswer(AdditionProblem problem){
int rowIndex = 0;
JLabel[] sumLabels = problem.getSumLabels();
JLabel[] addend1Labels = problem.getAddend1Labels();
JLabel[] addend2Labels = problem.getAddend2Labels();
JLabel[] carriedLabels = problem.getCarriedLabels();
rows.add(new JPanel());
for(int i = 0; i < carriedLabels.length; i++){
rows.get(rowIndex).add(carriedLabels[i]);
}
rowIndex++;
rows.add(new JPanel());
for(int i = 0; i < addend1Labels.length; i++){
rows.get(rowIndex).add(addend1Labels[i]);
}
rowIndex++;
rows.add(new JPanel());
for(int i = 0; i < addend2Labels.length; i++){
rows.get(rowIndex).add(addend2Labels[i]);
}
rowIndex++;
rows.add(new JPanel());
for(int i = 0; i < sumLabels.length; i++){
rows.get(rowIndex).add(new JLabel("__"));
}
rowIndex++;
rows.add(new JPanel());
for(int i = 0; i < sumLabels.length; i++){
rows.get(rowIndex).add(sumLabels[i]);
}
for(int i = 0; i < rows.size(); i++){
this.add(rows.get(i));
}
}
}
答案 0 :(得分:3)
在构造函数中初始化ArrayList<>()
。
public Console(){
rows = new ArrayList<JPanel>();
columns = new ArrayList<JLabel>();
init();
}
答案 1 :(得分:1)
您永远不会初始化您的private ArrayList<JPanel> rows;
成员。将其更改为
private ArrayList<JPanel> rows = new ArrayList<>();
。这同样适用于columns
,但它似乎并未在您发布的代码中的任何位置使用。