JTable: как получить выбранный объект из таблицы, связанной с источником данных - PullRequest
3 голосов
/ 05 сентября 2011

У меня есть JTable, свойство «elements» которого привязано к списку объектов, это главная таблица.Существует также таблица сведений, свойство «elements» которой привязано к selectedElement в основной таблице.Я сделал это с помощью построителя графического интерфейса пользователя NetBeans.Теперь я пытаюсь получить что-то вроде этого:

SomeEntityType selectedObject= (SomeEntityType) masterTable.getSelectedElement ()

в исходном коде, но в JTable такого свойства нет, только "getSelectedRow".Итак, как я могу получить выбранный объект из JTable, привязанного к источнику (список объектов)?Я читал похожие вопросы, но нахожу только ссылку на метод getValueAt (rowId, columnId), но в моей задаче не имеет значения, какой столбец выбран, поскольку выбрана полная строка.

1 Ответ

3 голосов
/ 05 сентября 2011

не знаю о 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();
...