工作命令行版本代码:
public static void printAll(Member[] platoon){
//System.out.println("You are in the third loop");
for (int cntr=0;cntr<platoon.length;cntr++){
System.out.println("Member Name: " + platoon[cntr].getName() + " " + "Join Date: " + platoon[cntr].getJoinDate());
}
}
上面的代码采用实例化的对象类型成员数组,并通过get方法返回存储在每个Member中的每个值(String Name,int day,int month,int year);.
我试图用Java的GUI功能做同样的事情。我的代码大约有300行,我绝对愿意发布它,因为这是阻止我完成项目的最后一件事。
下面我编写动作事件,我想用它来设置预览文本字段中的文本以及排列的当前内容。我试图用这个做的就是将打印件从上面的代码放到盒子里,它不喜欢类型VOID,所以我将它切换到返回类型String。现在它没有出现我可以将For循环的结果存储为字符串?我错过了一些至关重要的东西。
GUI代码:
}else if(event.getSource() == refreshButton){
displayText.setText(setPreview(platoon));
}
public static String setPreview(Member[] platoon){
//System.out.println("You are in the fourth loop");
preview = (for (int cntr=0;cntr<platoon.length;cntr++){
System.out.println("Member Name: " + platoon[cntr].getName() + " " + "Join Date: " + platoon[cntr].getJoinDate()););
return preview;
}
}
感谢大家的帮助,将保持此OP更新,以帮助未来Stack Overflow成员解决此问题。
答案 0 :(得分:1)
循环不会返回结果,有趣的想法,Java只是没有。
使用StringJoiner
StringJoiner joiner = new StringJoiner("\n");
for (int cntr=0;cntr<platoon.length;cntr++){
joiner.add("Member Name: " + platoon[cntr].getName() + " " + "Join Date: " + platoon[cntr].getJoinDate());
}
return joiner.toString();
使用JTextArea#append
for (int cntr = 0; cntr < platoon.length; cntr++) {
ta.append("Member Name: " + platoon[cntr].getName() + " " + "Join Date: " + platoon[cntr].getJoinDate() + "\n");
}
使用JList
设计用于显示&#34;内容的列表&#34;。
有关详细信息,请参阅How to use lists
答案 1 :(得分:0)
您的问题出在setPreview
方法中。您使用System.out.println
这是一条指令,用于将文本打印到系统的标准输出设备(在大多数情况下是终端窗口)。它不返回字符串,并且您不能使用以下语法将字符串连接到变量:
preview = for(...) { ... }
由于setPreview
会返回一个String
,我怀疑你想要这样做:
public static String setPreview(Member[] platoon){
String result = "";
for (int cntr=0;cntr<platoon.length;cntr++){
if (result.length() > 0) result += " "; // put a space before the next output
result += "Member Name: " + platoon[cntr].getName() + " " + "Join Date: " + platoon[cntr].getJoinDate());
}
return result;
}
这将构建您需要的输出字符串,然后可以将其设置为文本字段或任何适当的输出字符串。
答案 2 :(得分:0)
覆盖成员中的toString()
方法:
@Override
public String toString() {
return "Member Name: " + getName() + " Join Date: " + getJoinDate();
}
PrintAll()
将成为(但您不再需要它):
public static void printAll(Member[] platoon) {
for (int cntr = 0; cntr < platoon.length; cntr++)
System.out.println(platoon[cntr].toString());
}
setPreview()
将成为(注意:这只是为了显示原理,有关如何在循环中连接字符串的更好方法,请参阅@MadProgrammer的答案):
public static String getPreviewText(Member[] platoon) {
String s = platoon.length > 0 ? platoon[0].toString() : "";
for (int i = 1; i < platoon.length; i++)
s += "\n" + platoon[i].toString();
return s;
}
public static void setPreview(Member[] platoon) {
displayText.setText(getPreviewText(platoon));
}