2016-07-21 2 views
-1

Для проекта highschool я создал цикл 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); 
} 

, когда я показываю strSongArtist, как это в стороне для цикла:

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

Btw мой учитель дал пример outputing кода, как это:

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

, но я не знаю, как это использовать?

+0

Что такое txtOutput? JTextField? JTextArea? Вы заменяете любую String в этом текстовом компоненте следующей строкой, поэтому отображаются только последние. Если JTextArea, вы хотите использовать append not setText. –

+0

'txtOutput.setText (valueContent);' заменит текст вместо добавления. Одно простое (но не оптимальное или хорошо разработанное) решение для этого было бы 'txtOutput.setText (txtOutput.getText() +", "+ valueContent);'. – Thomas

ответ

1

Каждый раз, когда цикл работает, он устанавливает текст txtOutput значению valueContent, поэтому он отображает последнего исполнителя в конце цикла. Вы должны, по крайней мере, создать строку и добавьте каждый художник к нему и установить текст в конце цикла

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

Возможно, вы захотите добавить '', '' перед песней и только если 'i> 1', чтобы предотвратить конечную запятую в конечном тексте. Также обратите внимание, что было бы разумно использовать «StringBuilder» здесь. – Thomas

+0

Спасибо, что это сработало для меня! –

+0

Пожалуйста, отметьте как ответ. –

0

Вашей проблема в том, что вы звоните txtOutout.setText() при каждой итерации цикла.

Таким образом, даже если textOutput некоторая метка/панель вообще, что бы иметь возможность отображать больше строки ... то, что вы делаете, что вы говорите это, чтобы только дисплей, что одна строка, что вы передаете в Это.

Значение: у вас есть цикл, который производит 5 отдельных строк. Если вы хотите, чтобы эти 5 строк отображались вместе, вы должны построить что-то, что содержит все эти 5 отдельных строк.

Вы можете сделать это, собирая результаты ваших вызовов «get (i)» с помощью StringBuffer; или вы вызываете setTest() с результатом «getText() +« \ n »+ get (i)» ...