【问题标题】:How to dynamically add and delete JTextField on Label click如何在标签单击时动态添加和删除 JTextField
【发布时间】:2014-03-13 15:03:27
【问题描述】:

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

这是我想要的照片

【问题讨论】:

  • +- 是标签吗?为什么标签必须像命令按钮一样工作?你真的希望魔法;)
  • 是的。这不可能吗?
  • 我在第一行做了,我只是不知道如何在后面的标签上做。
  • 如果有像Swingmultiple classescontrol over elements这样的魔杖,有什么不可能的?

标签: java swing jlabel jtextfield


【解决方案1】:
  1. 不要使用空布局和 setBounds()。您可以使用垂直 BoxLayout 来添加元素行。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-03-08
    • 1970-01-01
    • 2013-02-27
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多