получение выбранной строки через AbstractTableModel

Это неопределенное поведение (UB), означающее, что может произойти все что угодно, включая работающий код. Это UB, потому что emplace_back делает недействительными все указатели на объекты в векторе. Это происходит потому, что вектор может быть перераспределен (что, очевидно, так и есть).

Первый случай UB «не работает» из-за оптимизации короткой строки (sso). Из-за sso необработанный указатель указывает на память, непосредственно выделенную вектором, которая теряется после перераспределения.

Второй случай UB «работает», потому что текст строки слишком длинный для SSO и находится в независимом блоке памяти. Во время изменения размера строковый объект перемещается из, перемещая владельца блока памяти текста во вновь созданный строковый объект. Поскольку блок памяти просто меняет владельца, он остается в силе после emplace_back.

5
задан Hamza Yerlikaya 13 May 2009 в 09:03
поделиться

3 ответа

The TableModel only concerns itself with the data, the ListSelectionModel concerns itself with what is currently selected, so, no you can't get the selected row from the TableModel.

6
ответ дан 18 December 2019 в 08:31
поделиться

Как сказал MrWiggles, вы можете получить его из ListSelectionModel, доступ к которому вам доступен из самой таблицы. Однако в JTable есть удобные методы для получения выбранных строк. Если ваша таблица поддерживает сортировку и т. Д., Вам также нужно будет использовать метод convertRowIndexToModel :)

Из JTable JavaDoc:

   int[] selection = table.getSelectedRows();
   for (int i = 0; i < selection.length; i++) {
     selection[i] = table.convertRowIndexToModel(selection[i]);
   }
   // selection is now in terms of the underlying TableModel
13
ответ дан 18 December 2019 в 08:31
поделиться

Если вы позволите своему классу модели реализовать ListSelectionModel, а также TableModel, вы сможете получить выбор из одной модели ... но вы не сможете расширить два класса абстрактных моделей :-( (Это также в любом случае не очень хорошая идея, так как у вашего класса будет слишком много обязанностей).

0
ответ дан 18 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: