我有两个标签,一个用于添加,另一个用于删除JtextField。我可以添加jTextFields并删除它们,但我的目标是删除标签点击上的文本字段。
下图显示了我的目标,每次点击“+”标签时,都会创建下面的文本字段。当我单击“ - ”标签时,同一行上的文本字段将被删除。 我该怎么做才能实现这个目标?
这是我的代码:
lblRemoveTf = new JLabel();
lblRemoveTf.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
for(JTextField myTxt1 : myListOfTxtNum){
eto1 = myTxt1;
}
myListOfTxtNum.remove(eto1);
pnlTxtTxt.remove(pnlTxtTxt.getComponentAt(eto1.getLocation()));
frmGM.revalidate();
frmGM.repaint();
for(JTextField myTxt : myListOfTxtName){
eto = myTxt;
}
myListOfTxtName.remove(eto);
pnlTxtTxt.remove(pnlTxtTxt.getComponentAt(eto.getLocation()));
x-=50;
y-=50;
frmGM.revalidate();
frmGM.repaint();
}
});
lblRemoveTf.setBounds(450,6, 125, 25);
pnlTxtTxt.add(lblRemoveTf);
lblRemoveTf.setIcon(new ImageIcon(GroupManagement.class.getResource("/app/resources/minussmall.png")));
lblAddNewTF = new JLabel();
lblAddNewTF.setBounds(420, 6, 38, 25);
lblAddNewTF.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
count++;
txtStudentName= new JTextField();
txtStudentNumber = new JTextField();
myListOfTxtName.add(txtStudentName);
myListOfTxtNum.add(txtStudentNumber);
txtStudentName.setName("txtStudentname"+count);
txtStudentNumber.setName("txtStudentNumber" + count);
pnlTxtTxt.add(txtStudentName);
pnlTxtTxt.add(txtStudentNumber);
doContainTheListsOfTxt(txtStudentName, txtStudentNumber);
if(count>0){
x+=50;
y+=50;
txtStudentName.setBounds(225,6+y, 182, 27);
txtStudentNumber.setBounds(35, 6+y, 182, 27);
txtStudentName.setName(tempBox+count);
if(pnlTxtTxt.getComponentCount() >9){
pnlTxtTxt.setPreferredSize(new Dimension(450+y,50+y));
pnlTxtTxt.add(txtStudName);
pnlTxtTxt.add(txtStudentNumber);
frmGM.repaint();
scrpTxtTxt.revalidate();
}
}
frmGM.repaint();
}
});
lblAddNewTF.setIcon(new ImageIcon(GroupManagement.class.getResource("/app/resources/plussmall.png")));
pnlTxtTxt.add(lblAddNewTF);
这是我想要实现的照片
答案 0 :(得分:5)
不要使用null布局和setBounds()。您可以使用垂直BoxLayout添加行的行。
创建一个表示单行的类。因此,您将使用带有两个文本字段和两个按钮的JPanel。
每次添加一行面板时,都会将面板添加到ArrayList中,以便跟踪每一行。
单击“ - ”按钮时,可以使用getParent()方法查找按钮所属的面板。然后,您可以使用Container.remove(...)方法删除该行。
当您点击“+”按钮时,您将获得父面板。然后,您可以搜索ArrayList以获取当前面板的索引。然后,您可以使用Container.add(...)方法将面板添加到Container,并将面板添加到ArrayList。
此外,您可以使用JButton,而不是使用JLabel作为按钮。您可以使用setBorderPainted(false)
方法,按钮看起来像标签。