java - 如何在Label点击上动态添加和删除JTextField

标签 java swing jlabel jtextfield

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

这就是我想要实现的照片

This is the photo

最佳答案

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

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

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

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

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

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

关于java - 如何在Label点击上动态添加和删除JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22382728/

相关文章:

java - Woodstox 解析器不支持某些 unicode 字符

java - 需要在 JFrame 中使用 JOptionPane.ERROR_MESSAGE 类型的 JDialog

java - 在带有动态文本的 Jlabel(标签)框中设置背景图像

java - 如果窗口大小调整,JLabel 会复制自身

java - 使用 spring data JPA 而不是 hibernate

java - Arrays.sort() -- 原始和复杂数据类型的两种不同排序策略

java - 排除显示结果集的 JTable 中包含的外键

java - 如何从 ActionListener 获取值

java - 为什么 JPanel 不显示 ImageIcon?

java - 如何测试使用 JDBC 的 Spring Controller ?