По какой-то причине я не могу заставить свой код работать так, как я хочу. Моя задача - напечатать числа от 1 до 100 в 10 строках (Swing - не консоль!), Но числа находятся только в одной строке вместо 10 (например, 1-10, 11-20, 21-30 и т. д.), Если я уберите строку в последнем "textLabel.setText (/////);".
Мне не разрешено использовать HTML-коды в этикетках, потому что это не обсуждалось в классе. Есть другой способ?
Что я могу сделать, чтобы исправить код / цикл?
int i;
if (event.getSource() ==fåFramMönster){
String gridPattern = "";
for(i = 1; i <= 100; i++) {
gridPattern = gridPattern + " " + Integer.toString(i);
textLabel.setText(gridPattern);
if (i%10==0) {
textLabel.setText(gridPattern + "\n");
}
}
Я пробовал в консоли, и она отлично работает (получаю правильные результаты):
for(int k = 1; k <= 100; k++) {
System.out.print(" " + k);
if (k % 10 == 0)
System.out.print("\n");
}




Ваш код не работает, потому что setTextзаменяет содержимое, поэтому новая строка, добавленная setText(gridPattern + "\n"), отбрасывается при добавлении следующего значения.
Вы никогда не вставляете \n в само значение gridPattern.
Код должен быть:
String gridPattern = "";
for (int i = 1; i <= 100; i++) {
gridPattern = gridPattern + " " + Integer.toString(i);
if (i % 10 == 0) {
gridPattern = gridPattern + "\n";
}
}
textLabel.setText(gridPattern);
А еще лучше, если вы узнали о StringBuilder:
StringBuilder buf = new StringBuilder();
for (int i = 1; i <= 100; i++) {
buf.append(' ').append(i);
if (i % 10 == 0) {
buf.append('\n');
}
}
textLabel.setText(buf.toString());
Как упоминалось во многих комментариях, для форматирования текста он должен быть HTML, поэтому он должен начинаться с <html>, заканчиваться </html>, а строки должны быть разделены "<br>".
StringBuilder buf = new StringBuilder();
buf.append("<html>");
for (int i = 1; i <= 100; i++) {
buf.append(i).append(i % 10 == 0 ? "<br>" : " ");
}
buf.append("</html>");
textLabel.setText(buf.toString());
Я не думаю, что JLabel уважает символ '\ n'. Вот почему у нас так много вопросов: «Почему \ n не работает в JLabel?» и как «Вместо этого используйте HTML». Есть и другие ответы, помимо HTML, поэтому я пытался определить, что Кэти может / не может использовать в своем классе.
@ Аарон Верно. Я не ошибаюсь в моих наблюдениях, просто использовать \n или <br>. Если код OP изменить на использование <br>, он все равно не будет работать, поскольку значение с <br> будет немедленно заменено.
@ Андрей Я не согласен. Есть и другие проблемы и улучшения, которые вы в основном решили, переключившись на создание строки. К сожалению, мы не знаем, куда указать OP без дополнительной информации, и OP, вероятно, не уверен, какая информация имеет отношение к делу, поскольку нам не нужен список всего, что было рассмотрено. Так что это все равно что рвать зубы. В любом случае, ваша основная мысль здесь верна, так что +1.
@Andreas Я изменил его на <br>, и он действительно печатает там, где я хотел бы, чтобы новые строки были, но сейчас это не новая строка - вместо этого он просто печатает <br> между ними
@CathyCathola Если вы собираетесь использовать способ HTML, то этикетка должна знать, что он использует формат HTML. Таким образом, текст должен начинаться с «<html>» и заканчиваться на «</html>», иначе он не сможет рассматривать «<br>» как разрыв строки HTML.
Большое спасибо за то, что нашли время, чтобы помочь мне, но это все еще не отображается как 10 строк ... может быть, я сделал что-то странное где-то еще (не в первый раз xD).