Java 如何在JTextField中打印另一个System.out.println结果

Java 如何在JTextField中打印另一个System.out.println结果,java,user-interface,jtextfield,Java,User Interface,Jtextfield,我最近完成了一项作业,要求我们按字母顺序对文本文件中的名称进行排序,我使用了三个不同的类使其正常工作 class Person { String firstName; String lastName; } 然后我创建了它,按照姓氏和名字的字母顺序进行排序 class SortNames { void sortNames(Person[] arr, int type) { if (type == 1) { int j; boolean flag = true; // will det

我最近完成了一项作业,要求我们按字母顺序对文本文件中的名称进行排序,我使用了三个不同的类使其正常工作

class Person {
String firstName;
String lastName;
}
然后我创建了它,按照姓氏和名字的字母顺序进行排序

 class SortNames {

 void sortNames(Person[] arr, int type) {
 if (type == 1) {
 int j;
 boolean flag = true; // will determine when the sort is finished
 Person temp;
 while (flag) {
 flag = false;

 for (j = 0; j < arr.length - 1; j++) {
 if (arr[j].lastName.compareToIgnoreCase(arr[j + 1].lastName) > 0) { // ascending
                                                                           // sort
  temp = arr[j];
  arr[j] = arr[j + 1]; // swapping
  arr[j + 1] = temp;
  flag = true;
     }
   }
  }
 for (int k = 0; k < arr.length; k++)
 System.out.println(arr[k].firstName +" "+arr[k].lastName);
 } else if (type == 2) {

  int j;
  boolean flag = true; // will determine when the sort is finished
  Person temp;
  while (flag) {
  flag = false;
  for (j = 0; j < arr.length - 1; j++) {

   if (arr[j].firstName.compareToIgnoreCase(arr[j + 1].firstName) > 0) { // ascending
                                                                           // sort
    temp = arr[j];
    arr[j] = arr[j + 1]; // swapping
    arr[j + 1] = temp;
    flag = true;
     }
     }
     }
    for (int k = 0; k < arr.length; k++)
    System.out.println(arr[k].firstName +" "+arr[k].lastName);
   }
   }

    }
我想创建一个GUI,用不同的按钮在不同的相对jtextfield中打印这三件事,但是当我打印出来时,只有一个名称打印到jtextfield上,即使文本文件中有大约30个名称。这就是我在“加载文件”按钮下调用的内容

对于排序,我尝试这样做,但仍然无法正常工作:

display2.setText(new SortNames().sortNames(arr, 2));
这里

这样做的正确方法是什么

到目前为止,这是我的GUI

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import java.util.*;



public class SortNamesGUI extends JFrame  {


private final LayoutManager layout;
private final LayoutManager layout2;
private JButton loadButton;
private JTextField filename;
private JTextArea display;
private JTextArea display2;
private JTextArea display3;

public SortNamesGUI()
{
super("Sorting Names");
setLayout(new BorderLayout());



JPanel buttonPanel = new JPanel();
layout = new FlowLayout();
buttonPanel.setLayout(layout);


JButton LoadFile = new JButton("Load File");
JButton FirstName = new JButton("Sort First Name");
JButton LastName = new JButton("Sort Last Name");
filename = new JTextField("Data file", 15);

buttonPanel.add(filename);
buttonPanel.add(LoadFile);
buttonPanel.add(FirstName);
buttonPanel.add(LastName);


JPanel DisplayPanel = new JPanel();
layout2 = new GridLayout(1,3);
DisplayPanel.setLayout(layout2);
display = new JTextArea("Unsorted list");
display2 = new JTextArea("Sorted based on first name");
display3 = new JTextArea("Sorted based on last name");

DisplayPanel.add(display);
DisplayPanel.add(display2);
DisplayPanel.add(display3);
DisplayPanel.add(new JScrollPane(display));
DisplayPanel.add(new JScrollPane(display2));
DisplayPanel.add(new JScrollPane(display3));

add(buttonPanel,BorderLayout.NORTH);
add(DisplayPanel,BorderLayout.CENTER);


LoadFile.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Read();    }
}
);

}

/*public void actionPerformed(ActionEvent event) {
Read();
}*/

public void Read() {
   try {
   String file = filename.getText();
   int filesize = file.length();

     Scanner input = new Scanner(getClass().getResourceAsStream(file));


  int namesCount = Integer.parseInt(input.nextLine());
  Person[] arr = new Person[namesCount];
       String line = null;
       int i = 0;
  while (input.hasNextLine()) {
           line = input.nextLine();
           Person person = new Person();
  person.firstName = line.split(" ")[0];
           person.lastName = line.substring(person.firstName.length(),
                   line.length()).trim();
           arr[i] = person;
           display.setText(arr[i].firstName +" "+arr[i].lastName);
           i++;
           person.toString();


     }
        } catch (IndexOutOfBoundsException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      }


  public void SoftFirstName() {
  String file = filename.getText();
   int filesize = file.length();

     Scanner input = new Scanner(getClass().getResourceAsStream(file));

  int namesCount = Integer.parseInt(input.nextLine());
   Person[] arr = new Person[namesCount];
   new SortNames().sortNames(arr, 2);// sort by first name
    display2.setText(new SortNames().sortNames(arr, 2));




 }






public static void main(String[] args) {
 SortNamesGUI testing= new SortNamesGUI();
  testing.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  testing.setSize(620, 180);
  testing.setVisible(true);



}
}
如果您尝试过此操作,很可能会出现编译器错误。这是因为
sortNames()
方法返回
void
,但是
setText()
方法需要
String
参数。您需要修改
sortNames()
以返回排序后的数组,而不是直接打印出来。在原始代码中,
main()。这是我们称之为单一责任原则的一个例子。每个方法都应该负责一个任务。在本例中,您的
sortNames()
做两件事:1。对数组和2进行排序。打印已排序的数组。如果您将这两个任务分离成不同的方法,那么当您将其转换为GUI时,您的工作将更加容易

一旦将这两个任务分开,就需要决定名称在JTextAray中的显示方式。我至少可以想到两种解决方案:

  • 将整个数组转换为字符串,并在JTextArea中显示结果。这应该很容易实现,但输出将有一个名称列表,名称列表在方括号内用逗号分隔

  • 将每个名称一次添加到JTextArea。请注意,
    setText()
    将用给定的文本完全替换JTextArea的全部内容。我建议您考虑一下,寻找另一种对您的目的有用的方法


  • 在使用正确的缩进格式化之前,不要查看此转储代码。此代码是否编译?您的代码无法读取。你是如何阅读和理解它的?或者你不知道?请格式化(缩进)代码,以正确显示代码结构并使其可读。长答案是,是的-好的,短答案,你最好下面的答案是,不-你需要设计一个符合你需要的API,但是返回您想要显示的信息,以便您决定如何显示。您应该显示您编写的GUI代码。正如其他人所说,您应该了解公认的格式约定,以帮助其他人更好地阅读您的代码。
    display2.setText(new SortNames().sortNames(arr, 2));
    
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    import java.util.*;
    
    
    
    public class SortNamesGUI extends JFrame  {
    
    
    private final LayoutManager layout;
    private final LayoutManager layout2;
    private JButton loadButton;
    private JTextField filename;
    private JTextArea display;
    private JTextArea display2;
    private JTextArea display3;
    
    public SortNamesGUI()
    {
    super("Sorting Names");
    setLayout(new BorderLayout());
    
    
    
    JPanel buttonPanel = new JPanel();
    layout = new FlowLayout();
    buttonPanel.setLayout(layout);
    
    
    JButton LoadFile = new JButton("Load File");
    JButton FirstName = new JButton("Sort First Name");
    JButton LastName = new JButton("Sort Last Name");
    filename = new JTextField("Data file", 15);
    
    buttonPanel.add(filename);
    buttonPanel.add(LoadFile);
    buttonPanel.add(FirstName);
    buttonPanel.add(LastName);
    
    
    JPanel DisplayPanel = new JPanel();
    layout2 = new GridLayout(1,3);
    DisplayPanel.setLayout(layout2);
    display = new JTextArea("Unsorted list");
    display2 = new JTextArea("Sorted based on first name");
    display3 = new JTextArea("Sorted based on last name");
    
    DisplayPanel.add(display);
    DisplayPanel.add(display2);
    DisplayPanel.add(display3);
    DisplayPanel.add(new JScrollPane(display));
    DisplayPanel.add(new JScrollPane(display2));
    DisplayPanel.add(new JScrollPane(display3));
    
    add(buttonPanel,BorderLayout.NORTH);
    add(DisplayPanel,BorderLayout.CENTER);
    
    
    LoadFile.addActionListener(
    new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    Read();    }
    }
    );
    
    }
    
    /*public void actionPerformed(ActionEvent event) {
    Read();
    }*/
    
    public void Read() {
       try {
       String file = filename.getText();
       int filesize = file.length();
    
         Scanner input = new Scanner(getClass().getResourceAsStream(file));
    
    
      int namesCount = Integer.parseInt(input.nextLine());
      Person[] arr = new Person[namesCount];
           String line = null;
           int i = 0;
      while (input.hasNextLine()) {
               line = input.nextLine();
               Person person = new Person();
      person.firstName = line.split(" ")[0];
               person.lastName = line.substring(person.firstName.length(),
                       line.length()).trim();
               arr[i] = person;
               display.setText(arr[i].firstName +" "+arr[i].lastName);
               i++;
               person.toString();
    
    
         }
            } catch (IndexOutOfBoundsException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
          }
          }
    
    
      public void SoftFirstName() {
      String file = filename.getText();
       int filesize = file.length();
    
         Scanner input = new Scanner(getClass().getResourceAsStream(file));
    
      int namesCount = Integer.parseInt(input.nextLine());
       Person[] arr = new Person[namesCount];
       new SortNames().sortNames(arr, 2);// sort by first name
        display2.setText(new SortNames().sortNames(arr, 2));
    
    
    
    
     }
    
    
    
    
    
    
    public static void main(String[] args) {
     SortNamesGUI testing= new SortNamesGUI();
      testing.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      testing.setSize(620, 180);
      testing.setVisible(true);
    
    
    
    }
    }
    
    display2.setText(new SortNames().sortNames(arr, 2));