JTable: как получить выбранный объект из таблицы, связанной с источником данных
У меня есть JTable, какое свойство "elements" привязано к списку объектов, это главная таблица. Существует также таблица сведений, свойство "elements" которой привязано к selectedElement в основной таблице. Я сделал это с помощью построителя графического интерфейса пользователя NetBeans. Теперь я пытаюсь получить что-то вроде этого:
SomeEntityType selectedObject= (SomeEntityType) masterTable.getSelectedElement ()
в исходном коде, но в JTable такого свойства нет, только "getSelectedRow". Итак, как я могу получить выбранный объект из JTable, привязанного к источнику (список объектов)? Я читал похожие вопросы, но нахожу только ссылку на метод getValueAt(rowId,columnId), но в моей задаче не имеет значения, какой столбец выбран, потому что выбрана полная строка.
1 ответ
Не знаю о NetBeans, просто знаю, что он использует версию Beansbinding, так что следующее, безусловно, может быть применено как-то
Вся идея использования связывающей среды состоит в том, что вы никогда не обращаетесь напрямую к представлению, а полностью концентрируетесь на своей модели (или bean-компоненте): некоторое свойство такой модели привязано к свойству представления, а ваш код только слушает изменения в свойствах вашего боба. "SelectedElement" является искусственным свойством привязки (на самом деле, JTableAdapterProvider, но вам ничего не нужно знать:-), поэтому привяжите к этому свойство вашей модели - вот фрагмент того, как сделать это вручную:
// model/bean
public class AlbumManagerModel .. {
// properties
ObservableList<Album> albums;
Album selectedAlbum;
// vents the list of elements
ObservableList<Album> getManagedAlbums() {
return albums;
}
// getter/setter
public Album getSelectedAlbum() {
return selectedAlbum;
}
public void setSelectedAlbum(Album album) {
Album old = getSelectedAlbum();
this.selectedAlbum = album;
firePropertyChange("selectedAlbum", old, getSelectedAlbum());
}
}
// bind the manager to a JTable
BindingGroup context = new BindingGroup();
// bind list selected element and elements to albumManagerModel
JTableBinding tableBinding = SwingBindings.createJTableBinding(
UpdateStrategy.READ,
albumManagerModel.getManagedAlbums(), albumTable);
context.addBinding(tableBinding);
// bind selection
context.addBinding(Bindings.createAutoBinding(UpdateStrategy.READ_WRITE,
albumManagerModel, BeanProperty.create("selectedAlbum"),
albumTable, BeanProperty.create("selectedElement_IGNORE_ADJUSTING")
));
// bind columns
tableBinding.addColumnBinding(BeanProperty.create("artist"));
...
context.bind();