Я предполагаю, что вы, вероятно, добавляете расширение JPanel
к другому компоненту (например, JFrame
, JApplet
, другому JPanel
и т. Д.).Вы упомянули, что у вас есть некоторая смесь между необходимостью добавления панели к подкомпонентам в этой панели и «другими объектами», которые панель должна слушать.Вероятно, было бы лучше добавить панель к этим «другим объектам» рядом с местом, где вы добавляете расширение JPanel
к включающему его JFrame
или другому родительскому компоненту, вне определения класса вашего расширения.
Тем не менее, для подкомпонентов вашей панели, которые должна прослушивать ваша панель, я думаю, что вы делаете хорошо, если эти подкомпоненты не видны объектам вне вашего определения класса расширения JPanel
.Это предупреждение просто указывает на то, что то, что вы делаете, может быть небезопасным, но в конечном итоге, когда ваша панель будет собирать мусор, будут поступать все принадлежащие ей подкомпоненты, включая любые списки прослушивателей, на которые они ссылаются.ваше JPanel
расширение.Из-за этого я считаю, что помещать вызов add*Listener(this)
в закрытый метод с подходящим именем для вашего расширения JPanel
и вызывать его из вашего конструктора вполне нормально.
Другой вариант - использовать Eclipse.так что вы больше не получаете эти предупреждения ... (шутка;).