jTable bebbinding

Я вставляю данные из util.List в JTable с beansbinding. Я обернул ArrayList в список ObservableList и Observable, привязанный к данным, привязанным к uitl.List.I, в Netbeans и настроил свойства в "Содержимое таблицы" в Netbeans "JTable Beanbinding". опции'. При первом обновлении списка JTable также обновляется, и это нормально. Но во второй раз, когда я устанавливаю другой util.List, который приводится в список Observable, к списку, связанному с JTable, список обновляется, но JTable не обновляется (но когда я устанавливаю список, System.out.pr.. печатает правильные значения списка, здесь я изменил util.List на ObservableList и наоборот, чтобы найти, где проблема, но не результат, как я ожидал)(но когда я добавляю объекты в список, связанный с JTable, тогда JTable был обновлен.) Как я могу обновить JTable при обновлении списка (это означает, что когда я устанавливаю новый список, таблица также обновляется каждый раз, когда я устанавливаю новый список).

Вот мой код, используемый для установки списка

 public List<Customer> getSuggestionList() {
    return suggestionList;
 }

public void setSuggestionList(ObservableList suggestionList) {

    try {
        List oldSuggestionList = this.suggestionList;
        this.suggestionList = suggestionList;
        propertySupport.firePropertyChange(PROP_SUGGESTIONLIST, oldSuggestionList, suggestionList);

        System.out.println("Suggestionlist is setted-----------");
        Customer c = (Customer) suggestionList.get(0);
        System.out.println("sugesstion list customer--------" + c.getCustFname());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

1 ответ

Решение

Только что проверил: он работает как положено (ручное кодирование, конечно, не затрагивает Netbeans), sourceBean - класс, у которого есть свойство offertionList;

    BindingGroup context = new BindingGroup();
    BeanProperty valuesProperty = BeanProperty.create("suggestionList");

    JTableBinding tableBinding = SwingBindings.createJTableBinding(
            UpdateStrategy.READ_WRITE,
            sourceBean, valuesProperty,
            table);
    context.addBinding(tableBinding);
    tableBinding.addColumnBinding(BeanProperty.create("firstName"));
    tableBinding.addColumnBinding(BeanProperty.create("lastName"));
    context.bind();

    // add a button which changes the suggestionList 
    Action next = new AbstractAction("new data") {

        public void actionPerformed(ActionEvent e) {
            sourceBean.setSuggestionList(createRandomData());
        }

    };
    button.setAction(next);

Резюме: что-то не так с кодом, который вы не показываете;-)

Кстати: подписи получателей / установщиков должны иметь тот же тип, который у вас нет. Не имеет значения в моем тесте, в вашем контексте может указывать или не указывать некоторые нежелательные путаницы

Другие вопросы по тегам