JAVA Swing - установка JLabel равной строке в другом классе - PullRequest
1 голос
/ 31 января 2012

У меня есть метод с именем getTheUserInput в классе, который возвращает строку, которая обновляется в зависимости от действий пользователя, которая находится внутри класса с именем Board.java. У меня есть действие, которое добавляет данные в строку, которая, как я знаю, работает.

В моем другом классе у меня есть JLabel, который был установлен равным возвращаемой строке метода, следующим образом:

JLabel l = new JLabel(b.getTheUserInput());

Однако, когда я запускаю приложение, независимо от того, что вводит пользователь, строка обновляется, но JLabel остается пустым. Как мне обновлять JLabel в соответствии со строкой в ​​другом классе?

Ответы [ 3 ]

4 голосов
/ 31 января 2012

Вам бы .... нужно обновить JLabel.

myJLabel.setText(newString);

String s в Java являются неизменными, поэтому они никогда не могут изменяться

Например, когда вы говорите: «У меня есть действие, которое добавляет данные в строку, которая, как я знаю, работает». ... ты не прав. Вы создали новый String. Вам нужно указать JLabel с новым String (пользовательский ввод), если вы хотите изменить текст.

Редактировать: Чтобы ответить на последнюю часть вашего вопроса; вам нужно будет отслеживать JLabel и обновлять его, как я показываю выше, каждый раз, когда пользователь вводит данные (в обработчике событий для чего бы то ни было). Можно использовать Observer Pattern , поскольку Java предоставляет его через Observer и Observable

2 голосов
/ 31 января 2012

Эта метка устанавливается по умолчанию с тем, что изначально возвращается b.getTheUserInput(). Если выходные данные b.getTheUserInput() изменяются, метка не обнаруживается и поэтому не меняет свой текст.

Самый простой способ исправить это - вызвать l.setText(b.getTheUserInput()) всякий раз, когда b.getTheUserInput() имеет новый вывод.

Другой способ - написать прослушиватель (такой как ChangeListener ), который отправляет событие всякий раз, когда b.getTheUserInput() имеет новый вывод, затем добавить метку для добавления прослушивателя и изменить его текст, когда событие получено. Поначалу это может показаться более сложным, но преимущество заключается в том, что Board не нужно знать о метке или чем-то еще, что может понадобиться для доступа к ее выходу в будущем.

1 голос
/ 31 января 2012

Есть две возможности.

Сначала обновите текст l.setText(b.getTheUserInput()); Другой вариант заключается в том, что вы не добавили метку в контейнер.

...