powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Custom TableCellEditor в виде диалога
10 сообщений из 10, страница 1 из 1
Custom TableCellEditor в виде диалога
    #38013848
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Застрял на вроде бы простой задаче: имеется swing и JTable. Нужно сделать редактор ячейки в виде отдельной формы (панельки). Примеры оракла и поверхностный гуглинг подсказывают, что обычно используют кнопку в качестве Component для getTableCellEditorComponent. На эту кнопку вешают Action.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class MyEditor extends AbstractCellEditor
                         implements TableCellEditor{

public MyEditor() {
        button = new JButton();
        button.setActionCommand(EDIT);

...
 public Component getTableCellEditorComponent(JTable table,
                                                 Object value,
                                                 boolean isSelected,
                                                 int row,
                                                 int column) {
      
        return button;
    }
}



По клику мыши по кнопке срабатывает Action, который вызывает форму. Здесь все понятно.

Затык - как обойтись без мыши? В какой момент и откуда запустить Action (=диалог) принудительно?
...
Рейтинг: 0 / 0
Custom TableCellEditor в виде диалога
    #38014102
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока остановился на следующем:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    public Component getTableCellEditorComponent(JTable table, Object value,
                                                 boolean isSelected, int row,
                                                 int column) {
        account = (SunAccount)value;
        label.setText(account.toString());

        SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    System.out.println("run");
	chooser.showDialog(editorComponent, account);
                                    }
            });

        return editorComponent;
    }


editorComponent - все тот же JButton.
chooser-у передается editorComponent для позиционирования диалога на экране.

На chooser (диалог - пока JDialog) навешу прослушку проперти для дальнейшего вызова fireEditingStopped() или fireEditingCancel()

Есть варианты лучше? Что лучше, чем JDialog для формы?
...
Рейтинг: 0 / 0
Custom TableCellEditor в виде диалога
    #38014196
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladmir KНужно сделать редактор ячейки в виде отдельной формы (панельки).
Вы сразу предлагаете решение без какого-либо объяснения задачи-проблемы. Это очень уродское решение с точки зрения юзабилити интерфейса. Так давно уже никто не делает. Объясните для чего вам понадобилось. Есть масса альтернатив.

Vladmir KЗатык - как обойтись без мыши? В какой момент и откуда запустить Action (=диалог) принудительно?
А здесь у вас как раз проблема со Swing. Дело в том что Renderer это только отрисовщик. Сначала нужно активировать Editor, чтобы пользователь на него нажал. И тут возможны разные варианты.
Например навесить слушателей на таблицу, чтобы когда юзер попадает в определенную колонку, слушатель сразу активировал её на редактирование и отдавал фокус кнопке. Тогда клавой можно нажать пробел\ввод. Но с мышью такое не прокатит, потому что первый клик всегда придётся на таблицу отрисованую renderer-ами и на кнопку он не пройдет. Тогда нужно ещё вешать слушателя на мышь, проверять в какую колонку прошел клики и эмулировать нажатие на кнопку.
Т.е. помимо того что вы уродуёте интерфейс, ещё и кучу головняка в Swing получите.
...
Рейтинг: 0 / 0
Custom TableCellEditor в виде диалога
    #38014264
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczВы сразу предлагаете решение без какого-либо объяснения задачи-проблемы
Есть табличка. Пользователь просматривает данные, перемещаясь по табличке с помощью стрелок на клавиатуре или мыши (кому как угодно). Наконец пользователь доходит до ячейки, значение в которой нужно исправить.
Далее идея:
Пользователь начинает просто набирать на клавиатуре текст. Всплывает окошко с полем для поиска (где уже отображается только что введенный текст) и списком результатов, удовлетворяющих поиску.
Окошко так же можно вызвать мышью
Нужен ака расширенный hintlist или lookup.

BlazkowiczСначала нужно активировать Editor, чтобы пользователь на него нажал
TableCellEditor активизируется правильно (либо по 2-му щелчку, либо когда начинается ввод текста). Проблема отобразить его поверх таблицы, поменяв размер на больший (с размером вопрос решается переопределением setBounds() у компонента), чем ячейка.
BlazkowiczТ.е. помимо того что вы уродуёте интерфейс, ещё и кучу головняка в Swing получите.
Правильно, поэтому не хочу вешать слушателей на таблицу, а хочу чтоб Editor отработал.

Буду рад, если поделитесь как юзабильно реализуются подобные вещи.
Еще раз редактирование: пользователь набирает текст, активизируется поиск в базе, возвращаются рез-ты (в виде таблички), пользователь выбирает подходящий.
...
Рейтинг: 0 / 0
Custom TableCellEditor в виде диалога
    #38014283
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladmir KЕсть табличка. Пользователь просматривает данные, перемещаясь по табличке с помощью стрелок на клавиатуре или мыши (кому как угодно). Наконец пользователь доходит до ячейки, значение в которой нужно исправить.
Далее идея:
Пользователь начинает просто набирать на клавиатуре текст. Всплывает окошко с полем для поиска (где уже отображается только что введенный текст) и списком результатов, удовлетворяющих поиску.
Окошко так же можно вызвать мышью
Нужен ака расширенный hintlist или lookup.

Ну, обычный autocomplete, нафига там кнопка???

Vladmir KЕще раз редактирование: пользователь набирает текст, активизируется поиск в базе, возвращаются рез-ты (в виде таблички), пользователь выбирает подходящий.
Ячейка - обычный JTextField. Кнопка не нужна. Пользователь набирает текст, мы через SwingWorker отправляем запросы в базу.
(тут нужно иметь на клиенте очень жирный кэш, так как результат запроса может быть довольно толстый). Или курсор использовать (Scrollable ResultSet), но его переоткрывать на каждое нажатие придется.

Когда SwingWorker поучил результат - открываем новое окно - (Undecorated, чтобы убрать Envelope). Хотя я не уверен что JDialog подходящий класс. Мне кажется нужен java.awt.Window. Он ещё более легковесный.
Диалогу нужно сделать setFocusable(false), чтобы фокус всегда был в редактируемой ячейки. Перехватывать нажатия вверх, вниз, ввод и перенаправлять на диалог. Чтобы можно было одновременно вводить текст и выбирать в autocomplete.

Под Swing, кстати есть готовые AutoComplete, можно их прикрутить. К ним только фоновую работу с базой приделать. И сделать этот контрол редактором.
...
Рейтинг: 0 / 0
Custom TableCellEditor в виде диалога
    #38014306
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczЯчейка - обычный JTextField. Кнопка не нужна. Пользователь набирает текст
я боюсь, что поиск и работа с формой может усложниться в дальнейшем. Поэтому я и хотел ввод строки поиска сразу перенести на второе окошко, чтоб можно было бы кастомизировать как угодно.
BlazkowiczМне кажется нужен java.awt.Window
А как на счет javax.swing.JWindow?
BlazkowiczПод Swing, кстати есть готовые AutoComplete
Посоветовать удачный можете?
...
Рейтинг: 0 / 0
Custom TableCellEditor в виде диалога
    #38014322
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Custom TableCellEditor в виде диалога
    #38014364
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczИ все же. Зачем кнопка?
Да не зачем! У меня изначально он и был (TextField). Кнопка появилась в процессе поиска решения:
Vladmir KПримеры оракла и поверхностный гуглинг подсказывают, что обычно используют кнопку
Т.к. я планировал перенести всю логику в диалог, то было не принципиально какой компонент используется в качестве редактора.

Спасибо за ссылку и вообще спасибо.
Чувствую, еще с переводом фокуса и позиционированием окна намучаюсь.
...
Рейтинг: 0 / 0
Custom TableCellEditor в виде диалога
    #38014379
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если вы хотите сложную панель, то может TableTree сделать? Так чтобы под строкой появлялась ещё большая панель, если нужно.
...
Рейтинг: 0 / 0
Custom TableCellEditor в виде диалога
    #38014481
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczто может TableTree сделать?
Возьму на заметку, спасибо. А пока, попробую AutoComplete c "умно плавающим" окошком реализовать
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Custom TableCellEditor в виде диалога
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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