如何将对象从Array打印到TextField

时间:2015-05-02 22:04:22

标签: java arrays object textfield

  • 问题:我无法将在数组中输入的值返回到预览文本框
  • 理想的解决方案:用户按下刷新,框中会填充数组中的对象。
  • JDK:1.8

工作命令行版本代码:

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成员解决此问题。

3 个答案:

答案 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)

  1. 覆盖成员中的toString()方法:

    @Override
    public String toString() {
        return "Member Name: " + getName() + " Join Date: " + getJoinDate();
    }
    
  2. PrintAll()将成为(但您不再需要它):

    public static void printAll(Member[] platoon) {
        for (int cntr = 0; cntr < platoon.length; cntr++)
            System.out.println(platoon[cntr].toString());
    }
    
  3. 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));
    }