我有JTable将“elements”属性绑定到对象List,这是master表。还有详细信息表,其中“elements”属性绑定到master表中的selectedElement。我是在NetBeans GUI builder的帮助下完成的。现在我尝试得到这样的东西:
SomeEntityType selectedObject= (SomeEntityType) masterTable.getSelectedElement ()
在源代码中,但JTable中没有这样的属性,只有“getSelectedRow”。那么,我如何从JTable绑定到源(对象列表)中选择对象? 我已经阅读了类似的问题,但只找到getValueAt(rowId,columnId)方法的链接,但在我的任务中,选择哪一列并不重要,因为选择了完整行。
答案 0 :(得分:3)
使用绑定框架的整个想法是,你从不直接与视图对话,而是完全专注于你的模型(或bean):这种模型的某些属性绑定到属性视图和您的代码只监听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();