![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| GZep |
|
||||||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
Привет!
Вот есть такой код:
продолжение (разделил для удобства):
и MenuBar:
actionPerformed здесь - статический.... не пойму как из него поменять laf... Это сообщение отредактировал(а) GZep - 26.10.2007, 20:15 -------------------- ![]() ![]() |
||||||
|
|||||||
| powerOn |
|
||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Попробуй такой подход:
Меню:
Фрейм для теста меню:
|
||||
|
|||||
| GZep |
|
||||||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
поняв этот большой код, я смог выделить нужное:
сравним с тем, что было:
ИТОГО:
это ключевая строчка. Как она работает? Там же this! проблема с обращением к методу pack() (проблема - он не статический), который находится в другом классе остается открытой, тут решения не увидел. -------------------- ![]() ![]() |
||||||
|
|||||||
| powerOn |
|
||||||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Да, там this, но этот this имеет тип MyLookAndFeelMenu, поскольку данный код является кодом класса MyLookAndFeelMenu. конструкция [ИмяКласса.this] используется для обращения из внутренних нестатических классов и анонимных классов для обрашения к методам/полям экземпляра внешнего класса (конечно же с именем ИмяКласса).
Данный кусок кода можно разбить на 2 важные части:
здесь мы получаем ссылку на Окно, в котором находится наше меню. MyLookAndFeelMenu.this - это ссылка на текущий экземпляр меню (синтаксис для анонимного класса).
тут мы обновляем дерево компонентов.
Ты можешь вызвать нестатический метод только на экземпляре класса. Тебе следует поместить данный вызов в другое место, где ссылка на экземпляр окна будет доступна. |
||||||||
|
|||||||||
| GZep |
|
|||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
и кудаже? это должно происходить при действии, а значит в actionPerformed или в статическом методе вызываемом из actionPerformed. И то и другое не сможет этого сделать... какие варианты предусматривает java на такую ситуацию? -------------------- ![]() ![]() |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Почему это из actionPerformed оно не сработает? Обычно его не делают статическим. Если он принадлежит экземпляру класса, то с этим классом ты можешь делать что угодно. Так же, как и с другими классами, до которых можешь дотянуться из текущего. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| GZep |
|
|||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
nornad, у меня actionPerformed не может вызвать метод pack, который находится в другом классе.
-------------------- ![]() ![]() |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
метод pack() - нестатический, чтобы его вызвать нужно обладать ссылкой на объект. Что бы обладать ссылкой на объект, нужно её каким-либо образом передать в метод. Как вариант, написать имплементацию ActionListener-a, которая обладает полем типа JFrame и устанавливать его значение перед регистрацией слушателя. В методе actionPerformed данное поле будет доступно, а значит и метод pack() вызвать на нем можно. |
|||
|
||||
| GZep |
|
|||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
а почему эта конструкция не подходит для метода pack?
-------------------- ![]() ![]() |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
что ты имеешь ввиду? |
|||
|
||||
| GZep |
|
|||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
ну, почему я не могу обратиться к классу с помощью такой конструкции для вызова метода pack. Например тут:
как писалось раньше - работает. -------------------- ![]() ![]() |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
||||
|
||||
| GZep |
|
|||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
Ok. Тогда максималььно подробно:
Вот там последняя строчка - закомментирована... так как я, кажись не попадаю к классу MyFrame для вызова pack(). Как исправить? -------------------- ![]() ![]() |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
кажись или не попадаешь? что бы проверить, переопредели у MyFrame метод pack() следующим образом:
|
|||
|
||||
| GZep |
|
|||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
powerOn, попал... просто случайная опЫчатка в коде была...
-------------------- ![]() ![]() |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |