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