我有一个扩展JDialog的类,用于创建一个带有多个文本框的弹出框,供用户输入数据。单击“确定”按钮后,数据将存储到ArrayList中。如果没有数据输入到文本框中,并且用户单击“确定”,则一切正常。我仍然可以访问ArrayList。
我遇到的问题是点击JDialog的关闭按钮。无论文本框(数据或没有数据)发生什么,我在尝试访问ArrayList时都会收到NullPointerException。即使我尝试测试null。
处理此问题的正确方法是什么?是的,我对Java很新。也许我的方法从一开始就错了?
我的主程序调用getData()方法来检索数据。我认为这可能是错的,但是当点击“确定”按钮时它似乎有效。
*编辑以添加代码
public class DataPopup extends JDialog{
ArrayList<String> data;
ArrayList<JTextField> dataFields = new ArrayList<JTextField>();
public DataPopup(Frame parent) {
super(parent);
initUI();
}
private void initUI() {
JLabel name = new JLabel("Enter Data");
name.setFont(new Font("Arial", Font.BOLD, 13));
JLabel custNameLabel = new JLabel("Customer Name");
JTextField custNameField = new JTextField();
dataFields.add(custNameField);
JLabel serialNumLabel = new JLabel("Serial Number");
JTextField serialNumField = new JTextField();
dataFields.add(serialNumField);
JLabel notesLabel = new JLabel("Notes");
JTextField notesField = new JTextField();
dataFields.add(notesField);
JButton btn = new JButton("OK");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed (ActionEvent event) {
data = new ArrayList<String>();
for(int i = 0; i < dataFields.size(); i++) {
data.add(dataFields.get(i).getText());
}
dispose();
}
});
createLayout(name,
custNameLabel,
custNameField,
serialNumLabel,
serialNumField,
notesLabel,
notesField,
btn);
setModalityType(ModalityType.APPLICATION_MODAL);
setTitle("Information");
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLocationRelativeTo(getParent());
}
public ArrayList<String> getData() {
return data;
}
private void createLayout(JComponent... arg) {
Container pane = getContentPane();
GroupLayout g1 = new GroupLayout(pane);
pane.setLayout(g1);
g1.setAutoCreateContainerGaps(true);
g1.setAutoCreateGaps(true);
g1.setHorizontalGroup(g1.createParallelGroup(CENTER)
.addComponent(arg[0])
.addComponent(arg[1])
.addComponent(arg[2])
.addComponent(arg[3])
.addComponent(arg[4])
.addComponent(arg[5])
.addComponent(arg[6])
.addComponent(arg[7])
.addGap(200)
);
g1.setVerticalGroup(g1.createSequentialGroup()
.addGap(30)
.addComponent(arg[0])
.addGap(20)
.addComponent(arg[1])
.addGap(10)
.addComponent(arg[2])
.addGap(20)
.addComponent(arg[3])
.addGap(10)
.addComponent(arg[4])
.addGap(20)
.addComponent(arg[5])
.addGap(10)
.addComponent(arg[6])
.addGap(20)
.addComponent(arg[7])//OK button
.addGap(30)
);
pack();
}
}