"мышиная прозрачность" в JPanel: как убрать?
От: mihauzen Украина  
Дата: 21.09.05 10:43
Оценка:
Всем приветы!!!

В своем приложении я на основе JPanel реализую различные диалоговые окошки (с кнопочками, текстовыми полями и т.п.). Так вот, если одно такое диалоговое окошко перекрывает другое, ниже лежащее, то сквозь него (верхнее), мышь реагирует на элементы нижнего, и они, элементы, проявляются сквозь верхнее. Можно как-нибудь избавиться от такого поведения?
...все это временно... (с) Айэм
Re: "мышиная прозрачность" в JPanel: как убрать?
От: mihauzen Украина  
Дата: 21.09.05 14:15
Оценка:
Да, у всех JPanel установлено setOpaque(false), если это конечно имеет отношение к делу...
...все это временно... (с) Айэм
Re: "мышиная прозрачность" в JPanel: как убрать?
От: Blazkowicz Россия  
Дата: 21.09.05 14:34
Оценка:
Здравствуйте, mihauzen, Вы писали:

M>В своем приложении я на основе JPanel реализую различные диалоговые окошки (с кнопочками, текстовыми полями и т.п.). Так вот, если одно такое диалоговое окошко перекрывает другое, ниже лежащее, то сквозь него (верхнее), мышь реагирует на элементы нижнего, и они, элементы, проявляются сквозь верхнее. Можно как-нибудь избавиться от такого поведения?


Не очень понятно что ты делаешь. Свою реализацию MDI? Почему не на JInternalFrame/JDesktopPane?

И отукда мы можем знать что-там к чему в твоей реализации если ты никаких деталей не рассказал?
Re[2]: "мышиная прозрачность" в JPanel: как убрать?
От: mihauzen Украина  
Дата: 21.09.05 14:53
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Не очень понятно что ты делаешь. Свою реализацию MDI? Почему не на JInternalFrame/JDesktopPane?


B>И отукда мы можем знать что-там к чему в твоей реализации если ты никаких деталей не рассказал?


Попробую еще раз.
Я а основе JPanel создаю аля диалоговые окна. Почему не на JInternalFrame/JDesktopPane? Отвечаю — мне важен внешний вид этого диалогового окна. Что бы изменить внешний вид у JInternalFrame/JDesktopPane нужно лопатить их лук_энд_фил, что не оч хоцца. А так я с помощью картинок создаю необходимый тайтл, фон основного диалога, виды кнопачек. Получается что-то вроде вот такого:
С прозрачность, тенью — вобщем лук_энд_фил то что надо .
Диалог выводится в нужном месте в нужное время(аддится в рабочий контейнер). И если или с помощью таскания или как-нибудь еще, но под таким диалого окажется какой-нибудь элемент типа кнопки, вообщем, требующий реакцию мыши, то он ее получает сквозь диалоговое окно, чего в идеале быть не должно. JPanel — это не окно и я это понимаю, но вот что переопределить или каким другим образом отобрать эту "прозрачность на мышиные действия" я не наю.
Какие еще детали реализауии нужны — не наю. В качестве примера: взять один пэнл и влепить на него кнопку, взять другой пенл и расположить так, что бы он перекрывал кнопку первого пенэла (оба пенела аддютться в один контейнер), посмотреть что будет.
...все это временно... (с) Айэм
Re[3]: "мышиная прозрачность" в JPanel: как убрать?
От: Blazkowicz Россия  
Дата: 21.09.05 16:32
Оценка: 2 (1)
Здравствуйте, mihauzen, Вы писали:


M>Попробую еще раз.

M>Я а основе JPanel создаю аля диалоговые окна. Почему не на JInternalFrame/JDesktopPane? Отвечаю — мне важен внешний вид этого диалогового окна. Что бы изменить внешний вид у JInternalFrame/JDesktopPane нужно лопатить их лук_энд_фил, что не оч хоцца.

Пагубным путём идешь, товаришь!
Ну, да ладно. Попробуй в качестве теста на эти свои панели повешать MouseListener. Если поможет, можно сделать один экземпляр MouseAdapter на все панели. Но вообще это хак...
Re[4]: "мышиная прозрачность" в JPanel: как убрать?
От: mihauzen Украина  
Дата: 21.09.05 20:59
Оценка:
Здравствуйте, Blazkowicz, Вы писали:


B>Пагубным путём идешь, товаришь!

B>Ну, да ладно. Попробуй в качестве теста на эти свои панели повешать MouseListener. Если поможет, можно сделать один экземпляр MouseAdapter на все панели. Но вообще это хак...

Ну так, а как по другому?
Разве реально то, что я опказал на картинке, кодом сделать??? Не, нереального для программиста ничего нет,но время — это раз, да и сложно — это два.
А что пагубного то?
...все это временно... (с) Айэм
Re[5]: "мышиная прозрачность" в JPanel: как убрать?
От: Blazkowicz Россия  
Дата: 22.09.05 06:18
Оценка:
Здравствуйте, mihauzen, Вы писали:

B>>Пагубным путём идешь, товаришь!

B>>Ну, да ладно. Попробуй в качестве теста на эти свои панели повешать MouseListener. Если поможет, можно сделать один экземпляр MouseAdapter на все панели. Но вообще это хак...

M>Ну так, а как по другому?

M>Разве реально то, что я опказал на картинке, кодом сделать??? Не, нереального для программиста ничего нет,но время — это раз, да и сложно — это два.
M>А что пагубного то?
Ну, отход от концепции... 8)

А по второму вопросу что-нибудь будет? Пробовал? Получилось\нет?
Re: "мышиная прозрачность" в JPanel: как убрать?
От: Paulpa  
Дата: 22.09.05 06:33
Оценка:
Здравствуйте, mihauzen, Вы писали:

M>Всем приветы!!!


M>В своем приложении я на основе JPanel реализую различные диалоговые окошки (с кнопочками, текстовыми полями и т.п.). Так вот, если одно такое диалоговое окошко перекрывает другое, ниже лежащее, то сквозь него (верхнее), мышь реагирует на элементы нижнего, и они, элементы, проявляются сквозь верхнее. Можно как-нибудь избавиться от такого поведения?


У меня както возникала подобная проблемма, только поверх модальных (т.е. которые могут получать фокус) элементов интерфейса нужно было разместить ScrollPane.
Из этой ситуации я вышел добавив скролпане, используя метод add() в первую (или нулевую позицию) z-последовательности.
код выгледит следующим образом:



 getParent().add (scrollPane, java.awt.BorderLayout.CENTER,1);
 getParent().validate();
Re[6]: "мышиная прозрачность" в JPanel: как убрать?
От: mihauzen Украина  
Дата: 22.09.05 07:40
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Ну, отход от концепции... 8)

Что за концепция такая? Почему я о ней не знаю?

B>А по второму вопросу что-нибудь будет? Пробовал? Получилось\нет?

Имплементил MouseListener — не помогло.
...все это временно... (с) Айэм
Re[2]: "мышиная прозрачность" в JPanel: как убрать?
От: mihauzen Украина  
Дата: 22.09.05 07:43
Оценка:
Здравствуйте, Paulpa, Вы писали:

P>У меня както возникала подобная проблемма, только поверх модальных (т.е. которые могут получать фокус) элементов интерфейса нужно было разместить ScrollPane.

P>Из этой ситуации я вышел добавив скролпане, используя метод add() в первую (или нулевую позицию) z-последовательности.
P>код выгледит следующим образом:

P>
P> getParent().add (scrollPane, java.awt.BorderLayout.CENTER,1);
P> getParent().validate();
P>


Бррр...что-то не совсем понял, куда его добавлять: в нулевую позицию моего диалогового окшка или в нулевую позицию контейнера, куда вставляется диалоговое окошко?
...все это временно... (с) Айэм
Re[3]: "мышиная прозрачность" в JPanel: как убрать?
От: Paulpa  
Дата: 22.09.05 07:48
Оценка:
Здравствуйте, mihauzen, Вы писали:

P>>У меня както возникала подобная проблемма, только поверх модальных (т.е. которые могут получать фокус) элементов интерфейса нужно было разместить ScrollPane.

P>>Из этой ситуации я вышел добавив скролпане, используя метод add() в первую (или нулевую позицию) z-последовательности.

M>Бррр...что-то не совсем понял, куда его добавлять: в нулевую позицию моего диалогового окшка или в нулевую позицию контейнера, куда вставляется диалоговое окошко?


В нулевую позицию контейнера, который содержит элементы интерфейса диалогового окна.

Желтая карточка за оверквотинг поскипаный модератором. Blazkowicz.
Re[7]: "мышиная прозрачность" в JPanel: как убрать?
От: Blazkowicz Россия  
Дата: 22.09.05 07:49
Оценка:
Здравствуйте, mihauzen, Вы писали:

B>>Ну, отход от концепции... 8)

M>Что за концепция такая? Почему я о ней не знаю?
Ну, L&F, Swing MVC, в общем не будь таким серьёзным, я ж там смайлик поставил...

B>>А по второму вопросу что-нибудь будет? Пробовал? Получилось\нет?

M>Имплементил MouseListener — не помогло.

Тогда присылай код. Я набросал у себя примерчик. Если кликаешь по панели, а под ней кнопка, то событие передаётся в кнопку. Потому что Component.eventEnabled для панели возвращает false. А false возвращает потому что ниодин MouseListener у неё не зарегестрирован. И поэтому событие панелью не ловится и уходит в кнопку. Еже ли на панель повесить MouseListener? То eventEnabled вернет true. Событие будет обработано панелью и в кнопку уже не пойдёт.

Повесь слушателя на панель и на кнопку под ней. И скажи не уже ли слушатель отработает для обоих компанент???

Кстати, о какой версии JDK мы говорим? Хотя мне кажется что разницы не должно быть.
Re[8]: "мышиная прозрачность" в JPanel: как убрать?
От: mihauzen Украина  
Дата: 22.09.05 08:51
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Тогда присылай код. Я набросал у себя примерчик. Если кликаешь по панели, а под ней кнопка, то событие передаётся в кнопку. Потому что Component.eventEnabled для панели возвращает false. А false возвращает потому что ниодин MouseListener у неё не зарегестрирован. И поэтому событие панелью не ловится и уходит в кнопку. Еже ли на панель повесить MouseListener? То eventEnabled вернет true. Событие будет обработано панелью и в кнопку уже не пойдёт.


B>Повесь слушателя на панель и на кнопку под ней. И скажи не уже ли слушатель отработает для обоих компанент???


B>Кстати, о какой версии JDK мы говорим? Хотя мне кажется что разницы не должно быть.


Сорри, я это...малость всего забыл...addMouseListener(this);
Теперь все как надо
Спасибо.

А теперь вернемся к концепции — об чем речь? Это типа правил хорошего тона? Просто, хочется знать, что имелось ввиду, и почему я об этом в первые слышу
...все это временно... (с) Айэм
Re[4]: "мышиная прозрачность" в JPanel: как убрать?
От: mihauzen Украина  
Дата: 22.09.05 08:52
Оценка:
Здравствуйте, Paulpa, Вы писали:

P>В нулевую позицию контейнера, который содержит элементы интерфейса диалогового окна.

Спасибо, используя хак уже все получилось.
...все это временно... (с) Айэм
Re[3]: "мышиная прозрачность" в JPanel: как убрать?
От: ReD_Lukas Россия  
Дата: 22.09.05 13:01
Оценка:
Здравствуйте, mihauzen, Вы писали:

M>Я а основе JPanel создаю аля диалоговые окна. Почему не на JInternalFrame/JDesktopPane? Отвечаю — мне важен внешний вид этого диалогового окна. Что бы изменить внешний вид у JInternalFrame/JDesktopPane нужно лопатить их лук_энд_фил, что не оч хоцца. А так я с помощью картинок создаю необходимый тайтл, фон основного диалога, виды кнопачек.


Может в твоем случае имеет смысл использовать JWindow, а не JPanel? Выглядеть будет так,как ты захочешь (в качестве content pane вешаешь свою навороченную панель). Правда насчет прозрачности ничего не скажу — насколько помню, довольно сложно ее там сделать. Зато куча проблем, идущих от JPanel, сразу снимется (твоя проблема, фокус не надо контролировать и т.д. и т.п.).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: "мышиная прозрачность" в JPanel: как убрать?
От: mihauzen Украина  
Дата: 23.09.05 09:43
Оценка:
Здравствуйте, ReD_Lukas, Вы писали:

RD_>Может в твоем случае имеет смысл использовать JWindow, а не JPanel? Выглядеть будет так,как ты захочешь (в качестве content pane вешаешь свою навороченную панель). Правда насчет прозрачности ничего не скажу — насколько помню, довольно сложно ее там сделать. Зато куча проблем, идущих от JPanel, сразу снимется (твоя проблема, фокус не надо контролировать и т.д. и т.п.).


Да, метода сетОпакьу у него нету, а без прозрачности уже совершенно не тот вид. Но идея интересная. Спасибо.
А на счет фокуса, модальности — да, имеемс такой проблем, но, т.к. все приложение синхронизируется одним диспетчером, то в дальнейшем (пока это еще не реализоано), думаю, эти проблемя уйдут. И оч. хоцца верить, что не появится новых .
...все это временно... (с) Айэм
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.