Search code examples
javauser-interfacearraylistjtextfieldjcheckbox

How do I add JCheckBox next to each name that has been entered into an arraylist from a JTextField?


I am creating a ManageUsers GUI which will look like this:

enter image description here

I want the checkboxes to go next to the names in a list that were entered from the Add New User section. I know that most of it is not done but Here's what i have so far:

AddUsers

public class AddUsers {

   private String userName;

   public AddUsers(String userName) {
      this.userName = userName;
   }

   public AddUsers() {
      userName = "";
   }   

   public void setUserName(String userName) {
      this.userName = userName;   
   }

   public String getUserName() {
      return userName;
   }

   public String toString() {
      return userName + "\n";
   }

}      

ManageUsersGUI

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.awt.TextField;


public class ManageUsersGUI1 extends JPanel {
    public static ArrayList<AddUsers> users = new ArrayList<>();

    private JLabel addNewUserLabel;
    private JTextField addNewUserTextField;
    private JLabel deleteUsersLabel;
    private JCheckBox jcomp4;
    private JCheckBox jcomp5;
    private JCheckBox jcomp6;
    private JButton addButton;
    private JButton deleteButton;

    public ManageUsersGUI1() {         
        //construct components
        addNewUserLabel = new JLabel ("Add new User here:");
        addNewUserTextField = new JTextField (0);
        deleteUsersLabel = new JLabel ("Select which User(s) you would like to delete:");
        jcomp4 = new JCheckBox ("newCheckBox");
        jcomp5 = new JCheckBox ("newCheckBox");
        jcomp6 = new JCheckBox ("newCheckBox");
        addButton = new JButton ("Add");
        deleteButton = new JButton ("Delete");

        //set components properties
        addNewUserTextField.setToolTipText ("Enter name and click on Add button.");
        addButton.setToolTipText ("Click here to Add new user.");
        deleteButton.setToolTipText ("Click here to delete User(s) selected.");

        //adjust size and set layout
        setPreferredSize (new Dimension (580, 485));
        setLayout (null);

        //add components
        add (addNewUserLabel);
        add (addNewUserTextField);
        add (deleteUsersLabel);
        add (jcomp4);
        add (jcomp5);
        add (jcomp6);
        add (addButton);
        add (deleteButton);

        //set component bounds (only needed by Absolute Positioning)
        addNewUserLabel.setBounds (85, 130, 120, 25);
        addNewUserTextField.setBounds (235, 130, 125, 25);
        deleteUsersLabel.setBounds (135, 225, 281, 25);
        jcomp4.setBounds (225, 270, 140, 25);
        jcomp5.setBounds (225, 300, 140, 25);
        jcomp6.setBounds (225, 330, 140, 25);
        addButton.setBounds (385, 130, 100, 25);
        deleteButton.setBounds (230, 410, 100, 25);

        addButton.addActionListener(new AddButtonListener());

    }

    private class AddButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
           String text = addNewUserTextField.getText();
           users.add(new AddUsers(text));

           // Display the charges.
           JOptionPane.showMessageDialog(null, text + " has been added.");
        }
   }


    public static void main (String[] args) {
        JFrame frame = new JFrame ("AddUsersPanel1");
        frame.setTitle("Manage Users");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add (new ManageUsersGUI1());
        frame.pack();
        frame.setVisible (true);
    }
}

Solution

  • You could use a JPanel with BoxLayout as the layout manager.

    That way, for each new name entered in the JTextField, you can add a new JCheckBox to the JPanel and it automatically lists lays them out in order vertically.

    I've made some modifications to your code to exemplify, so you can adjust to your needs:

    public class ManageUsersGUI1 extends JPanel {
        public static ArrayList<AddUsers> users = new ArrayList<>();
    
        private JLabel addNewUserLabel;
        private JTextField addNewUserTextField;
        private JLabel deleteUsersLabel;
        private JButton addButton;
        private JButton deleteButton;
        private JPanel namePanel;
    
        public ManageUsersGUI1() {
            //construct components
            addNewUserLabel = new JLabel ("Add new User here:");
            addNewUserTextField = new JTextField (0);
            deleteUsersLabel = new JLabel ("Select which User(s) you would like to delete:");
            addButton = new JButton ("Add");
            deleteButton = new JButton ("Delete");
            namePanel = new JPanel();
            namePanel.setLayout(new BoxLayout(namePanel, BoxLayout.Y_AXIS));
    
            //set components properties
            addNewUserTextField.setToolTipText ("Enter name and click on Add button.");
            addButton.setToolTipText ("Click here to Add new user.");
            deleteButton.setToolTipText ("Click here to delete User(s) selected.");
    
            //adjust size and set layout
            setPreferredSize (new Dimension (580, 485));
            setLayout (null);
    
            //add components
            add (addNewUserLabel);
            add (addNewUserTextField);
            add (deleteUsersLabel);
            add (namePanel);
            add (addButton);
            add (deleteButton);
    
            //set component bounds (only needed by Absolute Positioning)
            addNewUserLabel.setBounds (85, 130, 120, 25);
            addNewUserTextField.setBounds (235, 130, 125, 25);
            deleteUsersLabel.setBounds (135, 225, 281, 25);
            addButton.setBounds (385, 130, 100, 25);
            namePanel.setBounds(225, 270, 140, 0);
            deleteButton.setBounds (230, 335, 100, 25);
    
            addButton.addActionListener(new AddButtonListener());
    
        }
    
        private class AddButtonListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                String text = addNewUserTextField.getText();
                users.add(new AddUsers(text));
    
                // Display the charges.
                JOptionPane.showMessageDialog(null, text + " has been added.");
    
                JCheckBox nameCheckBox = new JCheckBox();
                nameCheckBox.setText(addNewUserTextField.getText());
                namePanel.add(nameCheckBox);
                namePanel.setBounds(225, 270, 140, namePanel.getHeight() + 25);
                deleteButton.setBounds(230, deleteButton.getY() + 25, 100, 25);
                JFrame frame = (JFrame) getRootPane().getParent();
                frame.setSize(frame.getWidth(), frame.getHeight() + 25);
                frame.pack();
            }
        }
    
    
        public static void main (String[] args) {
            JFrame frame = new JFrame ("AddUsersPanel1");
            frame.setTitle("Manage Users");
            frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add (new ManageUsersGUI1());
            frame.pack();
            frame.setVisible (true);
        }
    }