Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Несколько вопросов о TableCellEditor


Автор: diablero 22.2.2007, 20:26
Есть клиент до базы данных, в списке, наименование таблиц, в зависемости от выбора, отображается соответствующая таблица.
У меня на данный момент возникло два вопроса:
1.  Как узнать что данные были изменены, чтобы их сохранить?
     Пробовал повешать кейлистенер, все работает, но в одном случае куча ошибок, если был нажат в текстовом поле только пробел.
2. Как если ячейка находиться в режиме редактирования, а пользователь пытаеться выбрать другую таблицу, выйти из режима редактирования и сохранить данные?

Код

import javax.swing.*;
import javax.swing.table.TableCellEditor;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.util.EventObject;


public class TextCellEditor extends AbstractCellEditor implements TableCellEditor {

    private JTextArea textCellEditor;

    public TextCellEditor() {
        textCellEditor = new JTextArea();
        textCellEditor.setWrapStyleWord(true);
        textCellEditor.setLineWrap(true);
    }
    public Object getCellEditorValue() {
        return textCellEditor.getText();
    }
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        if (value instanceof String) {
            textCellEditor.setText((String) value);
        }
        return new JScrollPane(textCellEditor);
    }
    public boolean isCellEditable(EventObject anEvent) {
        if (anEvent instanceof MouseEvent) {
            if (((MouseEvent) anEvent).getClickCount() != 2)
                return false;
        }
        return true;
    }
}


Автор: nornad 22.2.2007, 21:58
Цитата(diablero @  22.2.2007,  20:26 Найти цитируемый пост)
1.  Как узнать что данные были изменены, чтобы их сохранить?

У модели есть метод setValueAt(), который вызывается при установлении значения. Думаю, лучше использовать его. А KeyListener будет срабатывать на каждое нажатие любой клавиши.
Цитата(diablero @  22.2.2007,  20:26 Найти цитируемый пост)
2. Как если ячейка находиться в режиме редактирования, а пользователь пытаеться выбрать другую таблицу, выйти из режима редактирования и сохранить данные?

У редакторая ячейки (или у таблицы - не помню точно) есть метод stopEdit().

Автор: diablero 22.2.2007, 22:46
С первым я разобрался, на JTextArea прикрутил DocumentListener.

Есть мысль, прекращать редактирование таблицы при потери фокуса, надо проверить...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)