Java ArrayList JTextField NullPointerException
您好,在创建动态textArea方法时,我被返回Java ArrayList JTextField NullPointerException,java,nullpointerexception,awt,jtextfield,jtextarea,Java,Nullpointerexception,Awt,Jtextfield,Jtextarea,您好,在创建动态textArea方法时,我被返回 Exception in thread "main" java.lang.NullPointerException at WindowCreation.setContentsParams(WindowCreation.java:121) at Main.main(Main.java:38) 我需要能够返回一个用户输入并将其发送到数据库中,但目前我只是尝试获取单个textField/textArea ID,以便能够从中返回文本 WindowCre
Exception in thread "main" java.lang.NullPointerException
at WindowCreation.setContentsParams(WindowCreation.java:121)
at Main.main(Main.java:38)
我需要能够返回一个用户输入并将其发送到数据库中,但目前我只是尝试获取单个textField/textArea ID,以便能够从中返回文本
WindowCreation类如下所示
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 Array来识别文本字段,它可以正常工作,但是我无法获得单个字段的输入private ArrayList textArea;
private ArrayList<JTextArea> textArea;
您的文本区域为空。代码应为:
private ArrayList<JTextArea> textArea = new ArrayList<JTextArea>();
private ArrayList textArea=new ArrayList();
这将创建一个
empty
ArrayList,您现在可以对其进行操作 因为我们这里没有行号,请标记发生异常的行(Main.java,第38行和WindowCreation.java,第121行)是的,解决了它,我不敢相信这是基本的,我已经搜索了很多年了,完全跳过了删除,因为我刚刚按了它是正确的。干杯
private ArrayList<JTextArea> textArea = new ArrayList<JTextArea>();