Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Java, внутренний класс-слушатель и компонент фрейма JPanel / 2 сообщений из 2, страница 1 из 1
04.11.2012, 14:14:20
    #38024964
Паша01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java, внутренний класс-слушатель и компонент фрейма JPanel
Здравствуйте.
Вот первый пример простой и обычный. В нем создается объект класса 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
04.11.2012, 15:10:44
    #38024995
Паша01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java, внутренний класс-слушатель и компонент фрейма JPanel
Только что добавил строки
Код: java
1.
2.
contentPane.setVisible(false);
contentPane.setVisible(true);


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


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


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