Как динамически создать новый JTextField и новый JButton нажатием кнопки - PullRequest
0 голосов
/ 26 апреля 2020

Итак, я сделал 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);
                    }
                });
            }
        }); 
...