如何插入或删除由 3 个元素组成的 JPanel 行

How insert or delete row of JPanel consisting of 3 elements

我正在使用三个元素行的 JPanel:JLabel、JTextField、JButton。

jPanel.setLayout(new GridLayout(0,3));

我需要一行的按钮来从 JPanel 中删除它的行。

    for(Pair<JLabel, JTextField> pair: labelTextFieldPairs) {
        jPanel.add(pair.getFirst());
        jPanel.add(pair.getSecond());
        jPanel.add(createDeleteButton());//how to implement that method?
    }

我还有一个按钮可以将行添加到 JPanel。

怎么做?还是使用 JTable 更好?

如果我需要在 JPanel 中间某处插入由 3 个元素组成的行怎么办?怎么做?

    JButton addNumberToListButton = new JButton("add number to list");
    addNumberToListButton.addActionListener(new ActionListener() {          
        @Override
        public void actionPerformed(ActionEvent e) {
            Pair<JLabel, JTextField> pair = new Pair<>(new JLabel(), new JTextField());
            labelTextFieldPairs.add(pair);

            jPanel.add(pair.getFirst(), labelTextFieldPairs.size()); 
            jPanel.add(pair.getSecond(), labelTextFieldPairs.size());
            jPanel.add(createDeleteButton(), labelTextFieldPairs.size());
//will this 3 lines work?
        }
    });

删除操作如下所示:

public void removeRow(int firstComponentInRow) {
    labelTextFieldPairs.remove(firstComponentInRow / numberOfColumns);
    jPanel.remove(firstComponentInRow);
    jPanel.remove(firstComponentInRow);
    jPanel.remove(firstComponentInRow);
    jPanel.revalidate();
    jPanel.repaint();
}

添加操作如下所示:

public void addRow(Pair<JLabel, JFormattedTextField> labelAndTextField) {
    labelTextFieldPairs.add(labelAndTextField);
    jPanel.add(labelAndTextField.getFirst(), (labelTextFieldPairs.size() - 1) * numberOfColumns);
    jPanel.add(labelAndTextField.getSecond(), (labelTextFieldPairs.size() - 1) * numberOfColumns + 1);
    jPanel.add(createDeleteButton((labelTextFieldPairs.size() - 1) * numberOfColumns), (labelTextFieldPairs.size() - 1) * numberOfColumns + 2);
    jPanel.revalidate();
    jPanel.repaint();
}

其中 labelTextFieldPairs.size() 用作插入索引。