ArrayList<String> 无法转换为字符串。

ArrayList<String> cannot be converted to string.

好的,我正在制作一个 CD collection 程序并且一切顺利,因为我一直在学习我的课程,但后来我 运行 陷入了想要让它出现在jTextArea。我敢打赌有一个简单的解决方案,但我找不到。我是新手,任何答案将不胜感激,我也在这里寻找答案,但没有找到我理解的东西。

  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    jButton1.setEnabled(true);
    jButton2.setEnabled(false);
    jButton3.setEnabled(false);
    jButton4.setEnabled(false);      //buttons                                       

    ArrayList<String> CD = new ArrayList();  //list
    Collections.addAll(CD, "\nEd Sheeran - X\n", "\nNirvana - Nevermind\n", "\nShania Twain - Up!\n", "\nLights - Little Machines\n", "\nTaylor Swift - 1989\n");          //PreAdded CDs
    Collections.sort(CD);
    jTextArea1.setText(CD);    //it works if i do System.out.println(CD) ? I need it to go to jTextArea1 though.

setText 预计 一个 String。您有一个包含许多 String 的列表。您必须自己决定如何将这么多 String 组合成一个。

JTextArea 采用 String 参数,而不是 ArrayList。在继续之前,您需要将 CD ArrayList 转换为字符串(以您认为最佳的任何方法)。

当你打电话时

System.out.println(CD);

相当于这个

System.out.println(CD.toString());

所以你需要的是

jTextArea1.setText(CD.toString()); 

System.out 是一个 PrintStream,一个 overload of println takes an Object as a parameter,最终调用 toString()。这就是 System.out.println(CD) 起作用的原因。

相比之下,JTextArea 继承其 setText() method from JTextComponent,并且它接受 String,而不是 ObjectArrayList 无法隐式转换为 String。您可以轻松调用 toString() 显式转换为 String