【问题标题】:NullPointerException with ArrayList<JPanel> Calculator GUINullPointerException 与 ArrayList<JPanel> 计算器 GUI
【发布时间】:2015-06-03 05:27:41
【问题描述】:

我正在设计一个计算器控制台,它将接受两个值,创建一个 AdditionProblem 类的新实例,它将返回问题的 2 个加数的 JLabel 数组、总和以及从每个地方携带的金额(它展示作品)。我有一个扩展 JPanel 的自定义类和一个 JPanel 的 ArrayList,它们表示单击添加按钮后已解决问题的每一行。 AdditionProblem 类和 Main 类一样工作得很好。在创建控制台类以显示答案后单击添加按钮时,我在第 44 行“row.add(new 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));
    }
}

}

【问题讨论】:

    标签: java arrays arraylist jpanel jlabel


    【解决方案1】:

    在构造函数中初始化ArrayList&lt;&gt;()

    public Console(){
        rows = new ArrayList<JPanel>();
        columns = new ArrayList<JLabel>();
        init();
    }
    

    【讨论】:

    • 您可以将此答案标记为您的问题的解决方案。
    【解决方案2】:

    您永远不会初始化您的private ArrayList&lt;JPanel&gt; rows; 成员。将其更改为 private ArrayList&lt;JPanel&gt; rows = new ArrayList&lt;&gt;();。这同样适用于columns,尽管它似乎没有在您发布的代码中的任何地方使用。

    【讨论】:

      猜你喜欢
      • 2016-10-23
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      相关资源
      最近更新 更多