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

时间:2015-11-18 10:18:52

标签: swing insert jpanel row delete-row

我正在使用三行元素的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?
        }
    });

1 个答案:

答案 0 :(得分:0)

删除操作如下所示:

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()用作插入索引。