powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java, внутренний класс-слушатель и компонент фрейма JPanel
2 сообщений из 2, страница 1 из 1
Java, внутренний класс-слушатель и компонент фрейма JPanel
    #38024964
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Вот первый пример простой и обычный. В нем создается объект класса DrawPanel (DrawPanel наследует JPanel) и добавляется на фрейм.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class MainFrame extends JFrame {

	public MainFrame() {
		contentPane = this.getContentPane();
                ...
                BaseFactory factory = AbstractFactory.getFactory(id);
		dpanel = factory.createDrawPanel();
		dpanel.setBackground(Color.RED);
		contentPane.add(dpanel);
        }

	private Container contentPane;
	private DrawPanel dpanel;
}



Но как только код, создающий объект класса DrawPanel переместить во внутренний класс-слушатель, пример уже не хочет работать!

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public class MainFrame extends JFrame {

	public MainFrame() {
		contentPane = this.getContentPane();
                ...
		menuAndActions(...);
        }

	private void menuAndActions(...) {
		...
		Action drawLineAction = new AbstractAction(...) {

			public void actionPerformed(ActionEvent arg0) {
				BaseFactory factory = AbstractFactory.getFactory(id);
				dpanel = factory.createDrawPanel();
				dpanel.setBackground(Color.RED);
				contentPane.add(dpanel);
			}
		};
		...
	}

	private Container contentPane;
	private DrawPanel dpanel;
}



Вроде методы внутреннего класса имеют прямой доступ ко всем полям и методам внешнего класса. В чем проблема, не понятно!
Хотя если в методе actionPerformed() будет только строка dpanel.setBackground(Color.RED);, цвет панели будет нормально меняться!
Код: java
1.
2.
3.
public void actionPerformed(ActionEvent arg0) {
        dpanel.setBackground(Color.BLUE); 
}


Подскажите, в чем дело!
...
Рейтинг: 0 / 0
Java, внутренний класс-слушатель и компонент фрейма JPanel
    #38024995
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только что добавил строки
Код: java
1.
2.
contentPane.setVisible(false);
contentPane.setVisible(true);


или
Код: java
1.
contentPane.validate();


Заработало!
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java, внутренний класс-слушатель и компонент фрейма JPanel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]