2012-06-01 1 views
3

Я создаю JTable для Applet, который должен иметь возможность обрабатывать пользовательские правки. Таким образом, я расширил AbstractTableModel и успешно заполнил таблицу данными. Моя проблема в том, что после заполнения данных щелчок по таблице не позволяет редактировать.JTable с AbstractTableModel не редактируется при нажатии

Я переопределил метод isCellEditable() всегда return true, а также печатать сообщение на консоль при каждом вызове метода. Однако, когда я взаимодействую с таблицей (через любое количество последовательных щелчков мыши в любой отдельной ячейке), ячейка не становится редактируемой, и isCellEditable() никогда не будет вызвана.

Мой вопрос в том, что нужно вызывать для редактирования конкретной ячейки? Я прошу прощения за недостаток кода в сообщении, но код очень проприетарный, и мои начальники очень строги по выпуску любого кода.

+0

hmm. что бы вы не ошиблись, не видя какого-либо кода. – ChadNC

ответ

3

1.Are вы добавили AbstractTableModel к JTable уже видимого на экране

2.Если да, то коды строк не isCellEditable(), но должно быть

@Override 
public boolean isCellEditable(int row, int column) { 
    return true; 
} 

3.I'd предлагают использовать DefaultTableModel вместо того, чтобы отменить требуемые методы для AbstractTableModel

+0

Я действительно не понимаю, почему вы рекомендуете DefaultTableModel над AbstractTableModel. Он требует копирования и, таким образом, дублирования информации между вашими предметами домена и (взрыва) векторов и делает то же самое в другом направлении, когда оно редактируется. Почему бы просто не использовать объекты домена напрямую. Гораздо менее беспорядочно, ИМХО. –

+0

@JB Nizet 'DefaultTableModel' ничего не требовал, любые знания о' something', о 'Java',' JTable', его 'Model', в' DefaultTableModel' можно переопределить одинаково всем доступным методам, согласились с тем, что с ограничениями на использование 'Vector' или' double Array', мое мнение - это то, зачем беспокоиться о методах, которые, почему усложняют простые вещи, особенно если они работают от настроек по умолчанию, исходили из API, – mKorbel

+0

Вариант № 2 работал для меня, спасибо очень. Не могли бы вы объяснить, почему это изменилось после того, как таблица была добавлена ​​на экран? – user1431513

4

Для защиты интересов вашего начальника отредактируйте ваш вопрос, включив sscce, чтобы ex hibits проблема, которую вы описываете. Несколько примеров, подходящих для начальной точки, можно найти в How to Use Tables, и это example иллюстрирует редактируемый AbstractTableModel. Вы можете сравнить его с вашей реализацией.