如何在Label上单击动态添加和删除JTextField

时间:2014-03-13 15:03:28

标签: java swing jlabel jtextfield

我有两个标签,一个用于添加,另一个用于删除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);

这是我想要实现的照片

This is the photo

1 个答案:

答案 0 :(得分:5)

  1. 不要使用null布局和setBounds()。您可以使用垂直BoxLayout添加行的行。

  2. 创建一个表示单行的类。因此,您将使用带有两个文本字段和两个按钮的JPanel。

  3. 每次添加一行面板时,都会将面板添加到ArrayList中,以便跟踪每一行。

  4. 单击“ - ”按钮时,可以使用getParent()方法查找按钮所属的面板。然后,您可以使用Container.remove(...)方法删除该行。

  5. 当您点击“+”按钮时,您将获得父面板。然后,您可以搜索ArrayList以获取当前面板的索引。然后,您可以使用Container.add(...)方法将面板添加到Container,并将面板添加到ArrayList。

  6. 此外,您可以使用JButton,而不是使用JLabel作为按钮。您可以使用setBorderPainted(false)方法,按钮看起来像标签。