Java 如何在标签单击上动态添加和删除JTextField

Java 如何在标签单击上动态添加和删除JTextField,java,swing,jlabel,jtextfield,Java,Swing,Jlabel,Jtextfield,我有两个标签,一个用于添加,一个用于删除JtextFields。我可以添加jTextFields并删除它们,但我的目标是删除标签单击上的textfields 下面的图片显示了我的目标,每次单击“+”标签时,都会在其下方创建一个文本字段。当我单击“-”标签时,同一行上的文本字段将被删除。 我应该怎么做才能做到这一点 这是我的代码: lblRemoveTf = new JLabel(); lblRemoveTf.addMouseListener(new MouseAdapter() {

我有两个标签,一个用于添加,一个用于删除JtextFields。我可以添加jTextFields并删除它们,但我的目标是删除标签单击上的textfields

下面的图片显示了我的目标,每次单击“+”标签时,都会在其下方创建一个文本字段。当我单击“-”标签时,同一行上的文本字段将被删除。 我应该怎么做才能做到这一点

这是我的代码:

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(…)方法将面板添加到容器中,也可以将面板添加到ArrayList中

  • 此外,您可以使用JButton,而不是使用JLabel作为按钮。您只需使用
    setboordpainted(false)
    方法,按钮看起来就像一个标签

  • 不要使用null布局和setBounds()。可以使用垂直BoxLayout添加多行组件

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

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

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

  • 当您点击“+”按钮时,您会看到父面板。然后可以搜索ArrayList以获取当前面板的索引。然后,可以使用Container.add(…)方法将面板添加到容器中,也可以将面板添加到ArrayList中


  • 此外,您可以使用JButton,而不是使用JLabel作为按钮。您只需使用
    setbOrderPaint(false)
    方法,按钮就会看起来像一个标签。

    +
    -
    是标签吗?为什么标签必须像命令按钮一样工作?你真的希望有魔法;)对这是不可能的吗?我在第一行就做了,我只是不知道如何在后续的标签上做。当有像
    Swing
    多个类
    控制元素
    +
    -
    这样的魔杖是标签时,什么是不可能的?为什么标签必须像命令按钮一样工作?你真的希望有魔法;)对这不可能吗?我在第一行就这么做了,我只是不知道如何在后续的标签上这么做。当有像
    Swing
    多类
    控制元素这样的魔杖时,什么是不可能的?