我有两个标签,一个用于添加,一个用于删除 JtextFields。我可以添加 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);
这就是我想要实现的照片
最佳答案
不要使用 null 布局和 setBounds()。您可以使用垂直 BoxLayout 添加组件行。
创建一个类来表示单行。因此,您将使用带有两个文本字段和两个按钮的 JPanel。
每次添加一行面板时,都会将该面板添加到 ArrayList 中,以便您可以跟踪每一行。
当您单击“-”按钮时,您可以使用 getParent() 方法查找该按钮所属的面板。然后您可以使用 Container.remove(...) 方法删除该行。
当您单击“+”按钮时,您将获得父面板。然后你可以搜索ArrayList来获取当前面板的索引。然后您可以使用 Container.add(...) 方法将面板添加到 Container 中,并将面板添加到 ArrayList 中。
此外,您可以使用 JButton,而不是使用 JLabel 作为按钮。您只需使用 setBorderPainted(false)
方法,按钮就会看起来像一个标签。
关于java - 如何在Label点击上动态添加和删除JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22382728/