André Fecteau
André Fecteau

Reputation: 140

add array to JTextField

I am trying to add the contents of two arrays to two TextFields. When you run the program the problem is the current TextFields that I try to display (lines 70 - 83) when the window is redrawn, they only show the last item in their array. Is there any way to add all the items in a stacked list (one ontop of another.)

This is my first class ClassNameSorting Code:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public class ClassNameSorting extends JFrame {

    JTextField studentNameInputFirst, studentNameInputLast, studentNamesEneteredLast, studentNamesEnteredFirst;
    JButton nextName, sort, backToStart;
    JLabel firstName, lastName, classList;
    String disp = "";
    ArrayList<String> studentNameFirst = new ArrayList<String>();
    ArrayList<String> studentNameLast = new ArrayList<String>();
    ArrayList<String> sortedStudentNameFirst = new ArrayList<String>();
    ArrayList<String> savedUnsortedStudentNameLast = new ArrayList<String>();
    Container container = getContentPane();

    public ClassNameSorting() {
        container.setLayout(new FlowLayout());

        studentNameInputFirst = new JTextField(15);
        studentNameInputLast = new JTextField(15);
        nextName = new JButton("Save");
        sort = new JButton("Sort");
        firstName = new JLabel("First Name: ");
        lastName = new JLabel("Last Name: ");

        nextName.setPreferredSize(new Dimension(110, 20));
        sort.setPreferredSize(new Dimension(110, 20));

        container.add(firstName);
        container.add(studentNameInputFirst);
        container.add(lastName);
        container.add(studentNameInputLast);
        container.add(nextName);
        container.add(sort);

        nextName.addActionListener(new nextNameListener());
        sort.addActionListener(new sortListener());

        setSize(262, 120);
        setVisible(true);
    }
    private class nextNameListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            studentNameFirst.add(studentNameInputFirst.getText());
            studentNameLast.add(studentNameInputLast.getText());
            studentNameInputLast.setText(null);
            studentNameInputFirst.setText(null);
        }
    }
    private class sortListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {

            savedUnsortedStudentNameLast = new ArrayList<String>(studentNameLast);
            Collections.sort(studentNameLast);

            int totalSizeOfArray = studentNameLast.size();
            for(int i = 0; i < totalSizeOfArray; i++){
                boolean containsYorN = false;
                String tempElementForContains = studentNameLast.get(i);
                String tempElementFromStudentNameLast = savedUnsortedStudentNameLast.get(i);
                containsYorN = savedUnsortedStudentNameLast.contains(tempElementForContains);

                if(containsYorN == true){
                    int tempIndexPos = savedUnsortedStudentNameLast.indexOf(tempElementForContains);
                    String tempIndexElement = studentNameFirst.get(tempIndexPos);
                    sortedStudentNameFirst.add(i, tempIndexElement);
                }       
            }
            studentNamesEneteredLast = new JTextField();
            studentNamesEnteredFirst = new JTextField();
            for(int i = 0; i < totalSizeOfArray; i++){
                studentNamesEneteredLast.setText(studentNameLast.get(i));
            }
            for(int i = 0; i < totalSizeOfArray; i++){
                studentNamesEnteredFirst.setText(sortedStudentNameFirst.get(i));
            }
            studentNamesEneteredLast.setEditable(false);
            studentNamesEnteredFirst.setEditable(false);
            container.add(studentNamesEneteredLast);
            container.add(studentNamesEnteredFirst);
            setSize(262, 500);
            revalidate();
        }
    }   
}

My second class is: (DrawMainWindow)

import javax.swing.JFrame;
public class DrawMainWindow {
    public static void main(String[] args) {
        ClassNameSorting drawGui = new ClassNameSorting();
        drawGui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        drawGui.setLocationRelativeTo(null);
    }
}

The first array is studentNameLast. I am trying to add that to studentNamesEnteredLast text field. The second is sortedStudentNameFirst being added to studentNamesEnteredFirst.

Thanks for the help!

Upvotes: 0

Views: 720

Answers (2)

Andr&#233; Fecteau
Andr&#233; Fecteau

Reputation: 140

Was able to switch to a GridLayout and then added each last name and then first name together.

Code:

    container.setLayout(new GridLayout(totalSizeOfArray+3,2));
    for(int i = 0; i < totalSizeOfArray; i++){
        studentNamesEnteredLast = new JTextField();
        studentNamesEnteredFirst = new JTextField();
        studentNamesEnteredFirst.setEditable(false);
        studentNamesEnteredLast.setEditable(false);
        studentNamesEnteredLast.setText(studentNameLast.get(i));
        studentNamesEnteredFirst.setText(sortedStudentNameFirst.get(i));
        container.add(studentNamesEnteredLast);
        container.add(studentNamesEnteredFirst);
    }

Example:

enter image description here

Upvotes: 0

copeg
copeg

Reputation: 8348

for(int i = 0; i < totalSizeOfArray; i++){
    studentNamesEneteredLast.setText(studentNameLast.get(i));
}

The text in the JTextField will only reflect the last item of the List. If you wish to append the entire list, create a String from the List and set the text of the JTextField with that String (you might wish to have them separated by some character - below uses a comma)

StringBuilder sb = new StringBuilder();
for(int i = 0; i < totalSizeOfArray; i++){
    sb.append(studentNameLast.get(i)).append(",");//comma delim
}
studentNamesEneteredLast.setText(sb.toString());

Not entirely sure what you are after, but a JList or JTable might be more appropriate to display List information

Upvotes: 2

Related Questions