![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| AndreyF |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.11.2005 Репутация: нет Всего: нет |
Правильно ли я мыслю?
Мне нужно запретить передавать фокус из редактора ячейки таблицы в любой другой элемент окна. При этом менять текущую ячейку так же нельзя. Мой вариант решения разбит на два этапа. На первом этапе я запрещаю таблице менять текущую ячейку следующим образом: наследуя класс JTable переопределяется метод
Переопределение заключается в том, что добавляется только одно условие
С этого условия начинается метод. Естественно приходиться перетаскивать в нетронутом виде все private методы класса JTable, которые используются в
На втором этапе на редактор ячейки навешивается слушатель изменения фокуса и если фокус теряется, когда это запрещено, слушатель возвращает фокус редактору ячейки насильно ---
Первый этап для меня более или менее приемлем, но второй вызывает большое недоверие, ведь фокус то на мгновение, но теряется! Подскажите, пожалуйста, возможные варианты решения. |
||||||||
|
|||||||||
| Ortega |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 5.11.2005 Где: Харьков, Украина Репутация: 1 Всего: 6 |
Если редактор ведет свою родословню от JComponent, можно попробовать использовать InputVerifier. В нем переопределяется метод
и компоненту делается
Добавлено @ 06:03
А зачем? ведь можно сделать
--------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок |
||||||||
|
|||||||||
| AndreyF |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.11.2005 Репутация: нет Всего: нет |
Спасибо! Вариант с вызовом родительского метода выглядит очень изящно!
Но фокус, к сожалению, не получается удержать полностью. Фокус не убежит с одного текстового поля на другое, но если щелкнуть мышкой по кнопке, то кнопка получит событие нажатия и не получая фокуса. Так же можно мышкой открыть ComboBox. Но мне нужно запретить нажатия всех кнопочек, списочков и т.д.
|
|||
|
||||
| 02077461 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 13.7.2005 Репутация: нет Всего: 0 |
А setEnabled(false) не подходит??.
или
|
||||
|
|||||
| AndreyF |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.11.2005 Репутация: нет Всего: нет |
setEnabled(false) не подходит по трем причинам. Во-первых, количество компонентов определяется динамически и уследить за каждым довольно сложная задача. Во-вторых, кнопка меняет свой внешний вид, а это не нужно. В-третьих, если в редакторе таблицы введены корректные данные, то фокус и событие можно передать другому компоненту, запрет на любую работу с другими компонентами должен быть только если ячейка таблицы заполнена некорректными данными.
Обсуждение наводит меня на идею --- комбинировать InputVerifier, который запретит передачу фокуса клавиатуры другим компонентам и Использования прозрачной панели поверх всего фрейма. Эта панель быдет появляться только при входе в редактор и исчезать при выходе из него. Прозрачная панель одна примет все события мыши. Те из них, которые будут происходить внутри редактора, будут переданы ему, а остальные будут переданы "под прозрачную панель", только если удасться закрыть редактор ячейки. Хотелось бы получить какие-нибудь рецензии. PS Никак не могу отделаться от мысли, что эта проблема легко решается без всяких изворотов, а только лишь с помощью стандартных средств. Это сообщение отредактировал(а) AndreyF - 11.1.2006, 15:39 |
|||
|
||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
А зачем это все надо? Как я себе это представляю, лично мне было бы неудобно, если бы меня не отпускали, пока я не введу "правильное" с точки зрения программы значение. А пользователю должно быть удобно, это - самое главное.
Или, может, лучше переопределить cellEditor и следить, правильное ли мы значение имеем после каждой нажатой клавиши? |
|||
|
||||
| AndreyF |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.11.2005 Репутация: нет Всего: нет |
Дело в том, что правильны ли данные в ячейке, нет ли, определяет не сама программа, а сервер у которого она это спрашивает, так же как и любые другие компоненты большинство своих событий отправляют на сервер, который решает что делать дальше --- создать/изменить/удалить некоторые(й) компонент(ы). Вопрос удобно это или нет не стоит, т.к. львиная доля системы (которая даже не знает что такое Java) требует именно такого поведения от графической оболочки --- это всего лишь "проигрыватель".
Это сообщение отредактировал(а) AndreyF - 7.2.2006, 00:49 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |