如何插入或删除由 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() 用作插入索引。
我正在使用三个元素行的 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() 用作插入索引。