Выведите числа от 1 до 100 из 10 в Swing

По какой-то причине я не могу заставить свой код работать так, как я хочу. Моя задача - напечатать числа от 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");
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
249
1

Ответы 1

Ваш код не работает, потому что 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());

Большое спасибо за то, что нашли время, чтобы помочь мне, но это все еще не отображается как 10 строк ... может быть, я сделал что-то странное где-то еще (не в первый раз xD).

Cathy Cathola 12.10.2018 21:37

Я не думаю, что JLabel уважает символ '\ n'. Вот почему у нас так много вопросов: «Почему \ n не работает в JLabel?» и как «Вместо этого используйте HTML». Есть и другие ответы, помимо HTML, поэтому я пытался определить, что Кэти может / не может использовать в своем классе.

Loduwijk 12.10.2018 21:40

@ Аарон Верно. Я не ошибаюсь в моих наблюдениях, просто использовать \n или <br>. Если код OP изменить на использование <br>, он все равно не будет работать, поскольку значение с <br> будет немедленно заменено.

Andreas 12.10.2018 21:42

@ Андрей Я не согласен. Есть и другие проблемы и улучшения, которые вы в основном решили, переключившись на создание строки. К сожалению, мы не знаем, куда указать OP без дополнительной информации, и OP, вероятно, не уверен, какая информация имеет отношение к делу, поскольку нам не нужен список всего, что было рассмотрено. Так что это все равно что рвать зубы. В любом случае, ваша основная мысль здесь верна, так что +1.

Loduwijk 12.10.2018 21:50

@Andreas Я изменил его на <br>, и он действительно печатает там, где я хотел бы, чтобы новые строки были, но сейчас это не новая строка - вместо этого он просто печатает <br> между ними

Cathy Cathola 12.10.2018 21:53

@CathyCathola Если вы собираетесь использовать способ HTML, то этикетка должна знать, что он использует формат HTML. Таким образом, текст должен начинаться с «<html>» и заканчиваться на «</html>», иначе он не сможет рассматривать «<br>» как разрыв строки HTML.

Loduwijk 12.10.2018 22:14

Другие вопросы по теме