Извините, что нет кода.
CustomThing расширяется JComponent. Внутри него добавлен новый JLabel. Метку необходимо обновить из текстового поля во внешнем классе. Как мне получить доступ к методу метки setText, чтобы текстовое поле правильно обновляло метку?То же, что и 1, за исключением того, что класс CustomThing является дочерним классом DaddyCustomThing. CustomThing создается как:
DaddyCustomThing thing = new CustomThing();
Любые советы приветствуются. Я бы добавил немного кода, но я ужасно его пишу, и из-за этого это может сделать проблему более запутанной, а не менее.
PS. Цель этого - лучше понять JComponent и закрепить свой университетский проект с полученными знаниями.
@ Эндрю Томпсон По какой-то причине обычно считается, что я могу составить MCVE за 5 минут. Не совсем. Вероятно, мне потребовалось бы по крайней мере несколько часов, чтобы внести ясность в вопрос, на который может быть или не быть дан ответ. Насчет закрытия вопроса - если я не могу произвести MCVE, то я не заслуживаю спрашивать тогда? Кажется, это то, что вы подразумеваете. Запрещен ли StackOverflow для людей, которые сейчас не могут создавать MCVE? Я не понимаю.
Политика в отношении mcve, как указано на странице закрытия сообщений: «Вопросы, требующие помощи в отладке («почему этот код не работает?»), должны включать желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для его воспроизведения в вопросе. Вопросы без четкой формулировки проблемы бесполезны для других читателей. См. mcve". Я нахожу mvce очень полезным методом. Это не только упрощает помощь, но и является мощным инструментом отладка и тестирование. Во многих случаях при подготовке вы, вероятно, найдете решение самостоятельно.
@AndrewThompson, как упоминалось в другом комментарии, прошу прощения за то, что потратил ваше время. Теперь мне стало намного яснее, какой сейчас формат у StackOverflow и что я не имею права его использовать. Это не сарказм - это действительно моя ошибка. Честно говоря, спасибо за то, что помогли мне понять, что мне следует искать помощи в другом месте, поскольку сайт больше не обслуживает новичков. Удачи вам и спасибо за попытку помочь.




Все доступы к компоненту пользовательского интерфейса должны выполняться в «Потоке отправки событий» (EDT), поэтому вы можете проверить SwingUtilities.invokeLater() et.al. :
final String newVal = "toto";
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() {
myLabel.setText(newVal);
}
});
Обратите внимание на модификатор final для значения, которое вы хотите установить, поскольку создается подкласс.
Вероятно, у вас есть лучшие способы сделать это с помощью лямбда-выражения в Java 8, но идея остается прежней.
Спасибо. Я начну исследовать это прямо сейчас. Спасибо, что не нуждаетесь в MCVE и все еще можете предоставить некоторую информацию!
@Governator во многих случаях можно предоставить некоторую информацию без mcve. Однако это не обязательно полезная информация. Я предполагаю, что этот ответ вам не поможет, но это всего лишь предположение, потому что предоставленная информация является частичной. Частичная информация - пустая трата времени тех хороших людей, которые добровольно пытаются помочь.
@ c0der Вы правы в том, что этот ответ не является решением, которое я реализовал, но он дал мне несколько хороших идей, пока я изучал эту тему. Я ценю время людей, которые искренне пытаются помочь, но кажется, что StackOverflow превратился в место «профессиональных ответов на профессиональные вопросы», которое (как новичок) я не имею права использовать. Еще раз приношу свои извинения за то, что отнял у вас время и неправильно понял формат этого места. Теперь мне ясно, что следует искать помощи в другом месте, пока я не достигну достаточного уровня, чтобы задавать здесь вопросы.