|
|
|
Custom TableCellEditor в виде диалога
|
|||
|---|---|---|---|
|
#18+
Застрял на вроде бы простой задаче: имеется swing и JTable. Нужно сделать редактор ячейки в виде отдельной формы (панельки). Примеры оракла и поверхностный гуглинг подсказывают, что обычно используют кнопку в качестве Component для getTableCellEditorComponent. На эту кнопку вешают Action. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. По клику мыши по кнопке срабатывает Action, который вызывает форму. Здесь все понятно. Затык - как обойтись без мыши? В какой момент и откуда запустить Action (=диалог) принудительно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2012, 23:10:07 |
|
||
|
Custom TableCellEditor в виде диалога
|
|||
|---|---|---|---|
|
#18+
Пока остановился на следующем: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. editorComponent - все тот же JButton. chooser-у передается editorComponent для позиционирования диалога на экране. На chooser (диалог - пока JDialog) навешу прослушку проперти для дальнейшего вызова fireEditingStopped() или fireEditingCancel() Есть варианты лучше? Что лучше, чем JDialog для формы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 09:55:11 |
|
||
|
Custom TableCellEditor в виде диалога
|
|||
|---|---|---|---|
|
#18+
Vladmir KНужно сделать редактор ячейки в виде отдельной формы (панельки). Вы сразу предлагаете решение без какого-либо объяснения задачи-проблемы. Это очень уродское решение с точки зрения юзабилити интерфейса. Так давно уже никто не делает. Объясните для чего вам понадобилось. Есть масса альтернатив. Vladmir KЗатык - как обойтись без мыши? В какой момент и откуда запустить Action (=диалог) принудительно? А здесь у вас как раз проблема со Swing. Дело в том что Renderer это только отрисовщик. Сначала нужно активировать Editor, чтобы пользователь на него нажал. И тут возможны разные варианты. Например навесить слушателей на таблицу, чтобы когда юзер попадает в определенную колонку, слушатель сразу активировал её на редактирование и отдавал фокус кнопке. Тогда клавой можно нажать пробел\ввод. Но с мышью такое не прокатит, потому что первый клик всегда придётся на таблицу отрисованую renderer-ами и на кнопку он не пройдет. Тогда нужно ещё вешать слушателя на мышь, проверять в какую колонку прошел клики и эмулировать нажатие на кнопку. Т.е. помимо того что вы уродуёте интерфейс, ещё и кучу головняка в Swing получите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 10:48:31 |
|
||
|
Custom TableCellEditor в виде диалога
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВы сразу предлагаете решение без какого-либо объяснения задачи-проблемы Есть табличка. Пользователь просматривает данные, перемещаясь по табличке с помощью стрелок на клавиатуре или мыши (кому как угодно). Наконец пользователь доходит до ячейки, значение в которой нужно исправить. Далее идея: Пользователь начинает просто набирать на клавиатуре текст. Всплывает окошко с полем для поиска (где уже отображается только что введенный текст) и списком результатов, удовлетворяющих поиску. Окошко так же можно вызвать мышью Нужен ака расширенный hintlist или lookup. BlazkowiczСначала нужно активировать Editor, чтобы пользователь на него нажал TableCellEditor активизируется правильно (либо по 2-му щелчку, либо когда начинается ввод текста). Проблема отобразить его поверх таблицы, поменяв размер на больший (с размером вопрос решается переопределением setBounds() у компонента), чем ячейка. BlazkowiczТ.е. помимо того что вы уродуёте интерфейс, ещё и кучу головняка в Swing получите. Правильно, поэтому не хочу вешать слушателей на таблицу, а хочу чтоб Editor отработал. Буду рад, если поделитесь как юзабильно реализуются подобные вещи. Еще раз редактирование: пользователь набирает текст, активизируется поиск в базе, возвращаются рез-ты (в виде таблички), пользователь выбирает подходящий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 11:34:31 |
|
||
|
Custom TableCellEditor в виде диалога
|
|||
|---|---|---|---|
|
#18+
Vladmir KЕсть табличка. Пользователь просматривает данные, перемещаясь по табличке с помощью стрелок на клавиатуре или мыши (кому как угодно). Наконец пользователь доходит до ячейки, значение в которой нужно исправить. Далее идея: Пользователь начинает просто набирать на клавиатуре текст. Всплывает окошко с полем для поиска (где уже отображается только что введенный текст) и списком результатов, удовлетворяющих поиску. Окошко так же можно вызвать мышью Нужен ака расширенный hintlist или lookup. Ну, обычный autocomplete, нафига там кнопка??? Vladmir KЕще раз редактирование: пользователь набирает текст, активизируется поиск в базе, возвращаются рез-ты (в виде таблички), пользователь выбирает подходящий. Ячейка - обычный JTextField. Кнопка не нужна. Пользователь набирает текст, мы через SwingWorker отправляем запросы в базу. (тут нужно иметь на клиенте очень жирный кэш, так как результат запроса может быть довольно толстый). Или курсор использовать (Scrollable ResultSet), но его переоткрывать на каждое нажатие придется. Когда SwingWorker поучил результат - открываем новое окно - (Undecorated, чтобы убрать Envelope). Хотя я не уверен что JDialog подходящий класс. Мне кажется нужен java.awt.Window. Он ещё более легковесный. Диалогу нужно сделать setFocusable(false), чтобы фокус всегда был в редактируемой ячейки. Перехватывать нажатия вверх, вниз, ввод и перенаправлять на диалог. Чтобы можно было одновременно вводить текст и выбирать в autocomplete. Под Swing, кстати есть готовые AutoComplete, можно их прикрутить. К ним только фоновую работу с базой приделать. И сделать этот контрол редактором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 11:46:22 |
|
||
|
Custom TableCellEditor в виде диалога
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЯчейка - обычный JTextField. Кнопка не нужна. Пользователь набирает текст я боюсь, что поиск и работа с формой может усложниться в дальнейшем. Поэтому я и хотел ввод строки поиска сразу перенести на второе окошко, чтоб можно было бы кастомизировать как угодно. BlazkowiczМне кажется нужен java.awt.Window А как на счет javax.swing.JWindow? BlazkowiczПод Swing, кстати есть готовые AutoComplete Посоветовать удачный можете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 11:59:07 |
|
||
|
Custom TableCellEditor в виде диалога
|
|||
|---|---|---|---|
|
#18+
Vladmir Kя боюсь, что поиск и работа с формой может усложниться в дальнейшем. Поэтому я и хотел ввод строки поиска сразу перенести на второе окошко, чтоб можно было бы кастомизировать как угодно. Вариант, конечно. Но я все равно не вижу надобности создавать кнопку в таблице. - Набираем текст, перекидывам юзера в окно, важно только это сделать с минимальным для него испугом. Vladmir KА как на счет javax.swing.JWindow? Возможно. Я сейчас на вскидку не скажу, а JavaDoc читать некогда. Просто зачем нужен диалог без модальности не понятно. Но это если оставлять пользователя в таблице. Если вам остро нужно его выкинуть в диалог, тогда наверное диалог. И все же. Зачем кнопка? Vladmir KBlazkowiczПод Swing, кстати есть готовые AutoComplete Посоветовать удачный можете? http://today.java.net/pub/a/today/2007/07/19/adding-auto-completion-to-swing-comboboxes.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 12:08:49 |
|
||
|
Custom TableCellEditor в виде диалога
|
|||
|---|---|---|---|
|
#18+
BlazkowiczИ все же. Зачем кнопка? Да не зачем! У меня изначально он и был (TextField). Кнопка появилась в процессе поиска решения: Vladmir KПримеры оракла и поверхностный гуглинг подсказывают, что обычно используют кнопку Т.к. я планировал перенести всю логику в диалог, то было не принципиально какой компонент используется в качестве редактора. Спасибо за ссылку и вообще спасибо. Чувствую, еще с переводом фокуса и позиционированием окна намучаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 12:30:11 |
|
||
|
Custom TableCellEditor в виде диалога
|
|||
|---|---|---|---|
|
#18+
если вы хотите сложную панель, то может TableTree сделать? Так чтобы под строкой появлялась ещё большая панель, если нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 12:37:37 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38014283&tid=2130699]: |
0ms |
get settings: |
10ms |
get forum list: |
22ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
52ms |
get topic data: |
18ms |
get forum data: |
4ms |
get page messages: |
74ms |
get tp. blocked users: |
3ms |
| others: | 278ms |
| total: | 473ms |

| 0 / 0 |
