Обновление элемента внутри контейнера JComponent

Извините, что нет кода.

  1. Класс CustomThing расширяется JComponent. Внутри него добавлен новый JLabel. Метку необходимо обновить из текстового поля во внешнем классе. Как мне получить доступ к методу метки setText, чтобы текстовое поле правильно обновляло метку?
  2. То же, что и 1, за исключением того, что класс CustomThing является дочерним классом DaddyCustomThing. CustomThing создается как:

    DaddyCustomThing thing = new CustomThing();
    

Любые советы приветствуются. Я бы добавил немного кода, но я ужасно его пишу, и из-за этого это может сделать проблему более запутанной, а не менее.

PS. Цель этого - лучше понять JComponent и закрепить свой университетский проект с полученными знаниями.

"это может сделать проблему более запутанной" А может и нет. Опубликуйте минимальный воспроизводимый пример, чтобы мы могли получить информацию или проигнорировать (если это так запутанно, как вы подразумеваете). Голосование за закрытие. Я отменю голосование, если вы редактировать добавите MCVE (и дайте мне знать).
Andrew Thompson 25.03.2019 11:07

@ Эндрю Томпсон По какой-то причине обычно считается, что я могу составить MCVE за 5 минут. Не совсем. Вероятно, мне потребовалось бы по крайней мере несколько часов, чтобы внести ясность в вопрос, на который может быть или не быть дан ответ. Насчет закрытия вопроса - если я не могу произвести MCVE, то я не заслуживаю спрашивать тогда? Кажется, это то, что вы подразумеваете. Запрещен ли StackOverflow для людей, которые сейчас не могут создавать MCVE? Я не понимаю.

Governator 25.03.2019 11:18
«По какой-то причине принято считать, что я могу составить MCVE за 5 минут». Ничего себе, 5 минут? Кто это предполагает? Серьезно. Если вы не готовы потратить час или два на создание MCVE, вы действительно делаете недостаточно, чтобы гарантировать, что я займусь вашей проблемой. Я ожидаю, что есть и другие, которые чувствуют то же самое. Но это то, что вы должны сделать, прежде чем задавать вопрос, а не приносить содержательные извинения и не публиковать его, поскольку за него уже есть 3 близких голоса. Я знаю, что по крайней мере два из них связаны с той близкой причиной, в которой упоминается «без MCVE».
Andrew Thompson 25.03.2019 11:22

Политика в отношении mcve, как указано на странице закрытия сообщений: «Вопросы, требующие помощи в отладке («почему этот код не работает?»), должны включать желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для его воспроизведения в вопросе. Вопросы без четкой формулировки проблемы бесполезны для других читателей. См. mcve". Я нахожу mvce очень полезным методом. Это не только упрощает помощь, но и является мощным инструментом отладка и тестирование. Во многих случаях при подготовке вы, вероятно, найдете решение самостоятельно.

c0der 25.03.2019 15:21

@AndrewThompson, как упоминалось в другом комментарии, прошу прощения за то, что потратил ваше время. Теперь мне стало намного яснее, какой сейчас формат у StackOverflow и что я не имею права его использовать. Это не сарказм - это действительно моя ошибка. Честно говоря, спасибо за то, что помогли мне понять, что мне следует искать помощи в другом месте, поскольку сайт больше не обслуживает новичков. Удачи вам и спасибо за попытку помочь.

Governator 25.03.2019 19:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
87
1

Ответы 1

Все доступы к компоненту пользовательского интерфейса должны выполняться в «Потоке отправки событий» (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 25.03.2019 11:32

@Governator во многих случаях можно предоставить некоторую информацию без mcve. Однако это не обязательно полезная информация. Я предполагаю, что этот ответ вам не поможет, но это всего лишь предположение, потому что предоставленная информация является частичной. Частичная информация - пустая трата времени тех хороших людей, которые добровольно пытаются помочь.

c0der 25.03.2019 15:26

@ c0der Вы правы в том, что этот ответ не является решением, которое я реализовал, но он дал мне несколько хороших идей, пока я изучал эту тему. Я ценю время людей, которые искренне пытаются помочь, но кажется, что StackOverflow превратился в место «профессиональных ответов на профессиональные вопросы», которое (как новичок) я не имею права использовать. Еще раз приношу свои извинения за то, что отнял у вас время и неправильно понял формат этого места. Теперь мне ясно, что следует искать помощи в другом месте, пока я не достигну достаточного уровня, чтобы задавать здесь вопросы.

Governator 25.03.2019 19:26

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