Итак, я сделал 2 метода: один, чтобы добавить новую строку, и один, чтобы удалить ее.
public void newLine(JTextField jtf,JTextField jtf2,JButton jb,JButton jb2,int i){
if(jtf.getText()!=null){
String firstLine = jtf.getText();
list.add(firstLine);
}
jtf2 = new JTextField();
c.weightx=2;
c.ipady = 10;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = i;
panel.add(jtf2, c);
jb2= new JButton("+ Add new line");
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.ipady = 3;
c.gridx = 1;
c.gridy = i;
panel.add(jb2, c);
jb.setText("x Remove line");
panel.validate();
panel.repaint();
}
public void removeLine(JTextField jtf, JButton jb){
panel.remove(jtf);
panel.remove(jb);
panel.validate();
panel.repaint();
}
Сначала я создаю первое текстовое поле и первую кнопку и добавляю функциональность к своей кнопке, и она работает без проблема
panel = new JPanel(new GridBagLayout());
c = new GridBagConstraints();
scroll = new JScrollPane(panel);
scroll.setBounds(12, 87, 520, 100);
scroll.setBorder(null);
item1 = new JTextField();
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx=2;
c.ipady = 10;
c.gridx = 0;
c.gridy = 0;
panel.add(item1, c);
addLine= new JButton("+ Add new line");
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.1;
c.ipady = 3;
c.gridx = 1;
c.gridy = 0;
panel.add(addLine, c);
addLine.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
newLine(item1,item2,addLine,addLine2,1);
addLine.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent ae)
{
removeLine(item1,addLine);
}
});
}
});
Теперь вторая кнопка и второе текстовое поле созданы успешно. Теперь я хочу добавить тот же метод к кнопке, которая была создана, но кажется, что когда я это делаю, ничего не происходит. Мне нужно сделать как 50 текстовых полей и кнопок, поэтому я сделал метод. Выдает нулевую ошибку исключения. Я также попытался инициализировать кнопку вручную, а затем добавить список действий, но больше ничего не произошло.
addLine2= new JButton("+ Add new line");
addLine2.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
newLine(item2,item3,addLine2,addLine3,2);
addLine2.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent ae)
{
removeLine(item2,addLine2);
}
});
}
});