Search code examples
javaswingjbuttonjtextfield

Java- How to add more textfields by clicking a button?


I have created a frame in Java which has some textfields and buttons in it. Assuming that user wants more textfields (for example to add more data), I want to put a button and when a user clicks the button, then a new textfield should appear. then user can fill data in it and again by clicking that button another textfield should appear. How can I do this ? What code I need to write for the button to show more and more text fields by clicking button? Thank you !


Solution

  • It would be wise that instead of adding components to your JFrame directly, you add them to a JPanel. Though related to your problem, have a look at this small example, hopefully might be able to give you some hint, else ask me what is out of bounds.

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class JFrameExample
    {   
        private JFrame frame;
        private JButton button;
        private JTextField tfield;
        private String nameTField;
        private int count;
    
        public JFrameExample()
        {
            nameTField = "tField";
            count = 0;
        }
    
        private void displayGUI()
        {
            frame = new JFrame("JFrame Example");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new GridLayout(0, 1, 2, 2));
            button = new JButton("Add JTextField");
            button.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent ae)
                {
                    tfield = new JTextField();
                    tfield.setName(nameTField + count);
                    count++;
                    frame.add(tfield);
                    frame.revalidate();  // For JDK 1.7 or above.
                    //frame.getContentPane().revalidate(); // For JDK 1.6 or below.
                    frame.repaint();
                }
            });
            frame.add(button);
            frame.pack();
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        }
    
        public static void main(String... args)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    new JFrameExample().displayGUI();
                }
            });
        }
    }