将数组添加到 JTextField

add array to JTextField

我正在尝试将两个数组的内容添加到两个 TextField。当您 运行 程序时,问题是当 window 重绘时我尝试显示的当前 TextFields(第 70 - 83 行),它们只显示数组中的最后一项。有什么方法可以将所有项目添加到堆叠列表中(一个在另一个之上。)

这是我的第一个 class ClassNameSorting 代码:

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();
        }
    }   
}

我的第二个 class 是:(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);
    }
}

第一个数组是 studentNameLast。我正在尝试将其添加到 studentNamesEnteredLast 文本字段。第二个是添加到 studentNamesEnteredFirst 的 sortedStudentNameFirst。

感谢您的帮助!

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

JTextField 中的文本将仅反映列表的最后一项。如果您希望附加整个列表,请从列表中创建一个字符串并使用该字符串设置 JTextField 的文本(您可能希望将它们用某个字符分隔 - 下面使用逗号)

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

不完全确定你在寻找什么,但 JList 或 JTable 可能更适合显示列表信息

能够切换到 GridLayout,然后将每个姓氏和名字相加。

代码:

    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);
    }

示例: