【问题标题】:Using for loops to calculate the certificate of deposit [duplicate]使用for循环计算存款证明[重复]
【发布时间】:2016-07-21 13:41:09
【问题描述】:

对于一个高中项目,我创建了一个 for 循环来显示我初始化的 5 首歌曲。我把它放在一个名为 btnInitializeActionPerformed 的按钮下,所以当按下初始化按钮时,它会显示歌曲,但是它只显示最后一首歌曲,我做错了什么?

这是循环

Collections.addAll (strSongArtist, "Dont Stop Believing", "this", "hello",  "Think", "No");

for (int i = 0; i < strSongArtist.size(); i++) {
       String valueContent = strSongArtist.get(i);
       txtOutput.setText( valueContent);
}

当我在 for 循环中像这样显示 strSongArtist 时:

System.out.println(strSongArtist.get(i));

顺便说一句,我的老师举了一个这样输出代码的例子:

txtOutput.setText( strSongArtist.get(rn.nextInt(strSongArtist.size())).toString());

但我也不知道怎么用?

【问题讨论】:

  • 什么是txtOutput?一个 JTextField?一个 JTextArea?您正在将该文本组件中的任何字符串替换为下一个字符串,因此只显示最后一个。如果是 JTextArea,则要使用 append 而不是 setText。
  • txtOutput.setText( valueContent); 将替换文本而不是附加。一个简单(但不是最佳或设计良好)的解决方案是txtOutput.setText( txtOutput.getText() + ", " + valueContent);

标签: java swing user-interface


【解决方案1】:

您的问题是您在每次循环迭代期间都调用了 txtOutout.setText()。

所以,即使 textOutput 是一些标签/面板,它能够显示的不仅仅是字符串......你正在做的是你告诉它显示一个字符串你正在传递给它。

意思:你有一个循环产生 5 个单独的字符串。如果您希望这 5 个字符串一起显示,则必须构建包含所有这 5 个单独字符串的内容。

您可以通过使用 StringBuffer 收集“get(i)”调用的结果来做到这一点;或者你调用 setTest() 结果为 "getText() + "\n" + get(i)" ...

【讨论】:

    【解决方案2】:

    每次循环运行时,它会将txtOutput 的文本设置为valueContent 的值,因此它将在循环结束时显示最后一位艺术家。您至少应该创建一个字符串并将每个艺术家附加到它并在循环结束时设置文本

    String artists = "";
    for (int i = 0; i < strSongArtist.size(); i++) {
           artists += strSongArtist.get(i) + ", ";
    }
     txtOutput.setText( artists );
    

    【讨论】:

    • 您可能希望在歌曲前添加", ",并且仅在i &gt; 1 时添加,以防止在最终文本中出现尾随逗号。另请注意,在这里使用StringBuilder 可能是明智之举。
    • 谢谢你这对我有用!
    • 请标记为答案。
    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 2017-10-29
    相关资源
    最近更新 更多