我正在使用三行元素的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?
}
});
答案 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()用作插入索引。