Search code examples
javanullpointerexceptionawtjtextfieldjtextarea

ArrayList JTextField NullPointerException


Hi whilst creating a dynamic textArea method i was returned

Exception in thread "main" java.lang.NullPointerException
at WindowCreation.setContentsParams(WindowCreation.java:121)
at Main.main(Main.java:38)

i need to be able to return a user input and send it to be inserted to a database , but at the moment i was just trying to get individual textField/textArea ID's to be able to return text from them

The WindowCreation Class is as follows

import javax.swing.*;
import javax.swing.event.DocumentListener;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class WindowCreation {

private int mainHeight = 0;
private int mainWidth = 0;
private JButton button;
private ArrayList<JTextField> textField;
private ArrayList<JTextArea> textArea;
private JLabel label;
private JFrame frame;
private Toolkit tk = Toolkit.getDefaultToolkit();
private Dimension screenSize = tk.getScreenSize();
private JPanel jlabelEmpty = new JPanel();
private DefaultComboBoxModel<String> model;
private JComboBox<String> comboBox;

     public void setWindowParam(int width, int height, String name, int x,
        int y, boolean center) {
    frame = new JFrame(name);
    int screenHeight = screenSize.height;
    int screenWidth = screenSize.width;

    final int CENTER_X = ((screenWidth / 2) - (width / 2));
    final int CENTER_Y = ((screenHeight / 2) - (height / 2));

    frame.setResizable(false);
    if (center) {
        frame.setLocation(CENTER_X, CENTER_Y);
    } else {

        frame.setLocation(x, y);

    }
    frame.setSize(width, height);

    frame.addWindowListener(new WindowAdapter() {

        public void windowClosing(WindowEvent e) {
            System.exit(0);

        }
    });

    jlabelEmpty.setPreferredSize(new Dimension(width, height));
    jlabelEmpty.setOpaque(true);
    jlabelEmpty.setLayout(null);
    mainWidth = width;
    mainHeight = height;
}

public void setContentsParams(int width, int height, String x, String y,
        String content, String type,String[] choice) {
    boolean xIsNum;
    int wdthOffset;
    boolean yIsNum;
    int hightOffset;

    try {
        Integer.parseInt(x);
        xIsNum = true;
    } catch (Exception e) {
        xIsNum = false;
    }
    if (x.equals("center")) {
        wdthOffset = ((getWidth() / 2) - (width / 2));

    } else if (xIsNum) {

        wdthOffset = Integer.parseInt(x);

    }else{

        wdthOffset = 0;

    }

    try {
        Integer.parseInt(y);
        yIsNum = true;
    } catch (Exception e) {
        yIsNum = false;
    }
    if (y.equals("center")) {
        hightOffset = ((getHeight() / 2) - (height / 2));

    } else if (yIsNum) {

        hightOffset = Integer.parseInt(y);

    }else{

        hightOffset = 0;

    }
    switch (type) {
    case "button":
        button = new JButton(content);
        button.setSize(new Dimension(width, height));
        button.setLocation(wdthOffset, hightOffset);
        jlabelEmpty.add(button);
        button.setFont(new Font("name1", Font.BOLD, 20));
        ActionListener buttonListener = new ButtonListener();
        button.addActionListener(buttonListener);
        break;
    case "textfield":
        textField.add(new JTextField(content));
        textField.get(textField.size()-1).setSize(new Dimension    (width,height));
        textField.get(textField.size()-1).setLocation(wdthOffset, hightOffset);
        jlabelEmpty.add(textField.get(textField.size()-1));
        break;
    case "textarea":
        textArea.add(new JTextArea(content));
        textArea.get(textArea.size()-1).setSize(new Dimension(width,height));
        textArea.get(textArea.size()-1).setLocation(wdthOffset, hightOffset); 

        jlabelEmpty.add(textArea.get(textArea.size()-1));
        break;
    case "textdisplay":
        label = new JLabel(content);
        label.setSize(new Dimension(width,height));
        label.setLocation(wdthOffset, hightOffset);
        jlabelEmpty.add(label);
        break;
    case "dropmenu":
         model = new DefaultComboBoxModel<String>();
         int i = 0; 
         while (i < choice.length){

             model.addElement(choice[i]);
             i++;
         }
         comboBox = new JComboBox<String>(model);
         comboBox.setSize(new Dimension(width,height));
         comboBox.setLocation(wdthOffset,hightOffset);
         jlabelEmpty.add(comboBox);

    }
    frame.revalidate();
    frame.repaint();

}

public void displayInput(int compNum){

    System.out.println(textArea.get(compNum));

}

public void removePanel(int panel){

    jlabelEmpty.remove(panel);

}

public int getWidth() {

    return (mainWidth);

}

public int getHeight() {

    return (mainHeight);

}

public void DisplayWindow() {
    frame.getContentPane().add(jlabelEmpty, BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
}

}

And the method where it is being called

st = con.createStatement();
        ResultSet rs = st.executeQuery("select * from HR.employees");
        System.out.println("attempting to import Table...");
        window.removePanel(0);
        window.setContentsParams(200, 30, "center", "101", "First Name", "textarea",null);
        window.setContentsParams(200, 30, "center", "131", "Last Name", "textfield",null);
        window.setContentsParams(200, 30, "center", "161", "Email", "textfield",null);
        window.setContentsParams(200, 30, "center", "191", "PhoneNumber", "textfield",null);
        window.setContentsParams(200, 30, "center", "221", "Start Date", "textfield",null);
        String[] position = {"AD_PRES","AD_VP","AD_ASST","FI_MGR","FI_ACCOUNT","SA_MAN","SA_REP","PU_MAN","PU_MAN","PU_CLERK","ST_MAN","SH_CLERK","IT_PROG","MK_MAN","MK_REP","HR_REP","PR_REP"};
        window.setContentsParams(200, 30, "center", "251", "position", "dropmenu",position);
        window.setContentsParams(200, 30, "center", "281", "Salary (Yearly)", "textfield",null);
        String[] managerCodes = {"100","103","108","114","121","145","200","201","203","204","205"};
        window.setContentsParams(200, 30, "center", "311", "Manager Number", "dropmenu",managerCodes);
        String[] departmentCode = {"10","20","30","40","50","60","70","80","90","100","110","120","130","140","150","160","170","180","190","200","210","220","230","240","250","260","270"};
        window.setContentsParams(200, 30, "center", "341", "Department ID", "dropmenu",departmentCode);
        window.setContentsParams(100, 1000, "center", "541", "confirm", "button", null);
        while (rs.next()) {
            String outputTable = String
                    .format("%-6s | %-11s | %-11s | %-9s | %-18s | %-14s | %-10s | %-7s | %-4s | %-4s | %-4s ",
                            rs.getString("EMPLOYEE_ID"),
                            rs.getString("FIRST_NAME"),
                            rs.getString("LAST_NAME"),
                            rs.getString("EMAIL"),
                            rs.getString("PHONE_NUMBER"),
                            rs.getString("HIRE_DATE"),
                            rs.getString("JOB_ID"), rs.getString("SALARY"),
                            rs.getString("COMMISSION_PCT"),
                            rs.getString("MANAGER_ID"),
                            rs.getString("DEPARTMENT_ID"));
            System.out.println(outputTable);
        }

It works fine if i dont use and Array to identify the textFields however then i cant get the input for individual fields


Solution

  • private ArrayList<JTextArea> textArea;
    

    Your textArea is null. The code should be:

    private ArrayList<JTextArea> textArea = new ArrayList<JTextArea>();
    

    This will create an empty ArrayList that you can now manipulate.