'Programmatically Name Variables in Java for GUI

I am creating a GUI in java using gridLayout 6 x elevatorNum. My purpose is to create the number of columns based on the user input "elevatorNum" so that it can automatically be expanded. My problem now is that I want to populate each column with the same 6 JLabel fields and then be able to use these fields to change their values whenever I want to.

I am not able to do this since I will have to create a new set of 6 JLabels for each column but for that I would need to either hardcode each column or automatically expand them using user input. I want to automatically expand them using userInput but I don't know how to name each set of 6 JLabels without hardcoding them.

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setLayout(new GridLayout(7,elevatorNum));
        
        JLabel totalFloors = new JLabel("Total floors: " + floorNum);
        JLabel currentFloor = new JLabel("CurrentFloor : N/A");
        JLabel destFloor = new JLabel("Destination Floor: N/A");
        JLabel doorStatus = new JLabel("Doors Status: N/A");
        JLabel motorStatus = new JLabel("Motor Status: N/A");
        JLabel passengerStatus = new JLabel("Passenger Status: N/A");
        JLabel elevatorStatus = new JLabel("Elevator Direction: N/A");
        
        frame.add(totalFloors);
        frame.add(currentFloor);
        frame.add(destFloor);
        frame.add(doorStatus);
        frame.add(motorStatus);
        frame.add(passengerStatus);
        frame.add(elevatorStatus);

Now i want to create another 6 set of JLabels but I will have to use different name but I don't know the userinput so I cannot hardcode the 6 JLabels. I also want to use each set of JLabels later on to update/edit their values.

I would greatly appreciate your help.



Solution 1:[1]

I had a similar experience of populating the layout with buttons and need to change their values anytime I want. I think you don't need to have user input to create labels, try simply create JLabels in a for loop, and track them by adding each of them to a List. you could find exactly that label through its index in array.

for example, create a list to track them:

 List<JLabel> labelList = new ArrayList<>();

then create a method to create JLabels:

private JLabel createLabel() {
    JLabel newLabel = new JLabel("give_it_an_initial_name");
    // maybe do something on each label
    return newButton;
}

finally add them to frame:

for(int i = 0; i < 6 * elevatorNum; i++) {
        JLabel addLabel = createLabel();
        frame.add(addLabel);
        labelList.add(addLabel);
    }

when you want to change something on label, fetch it from list and edit, no need to give each of them a name.It's a very simple way, might not be very good, but it works.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Haonan Wang