JComboBox обменивается данными с TableModel

У меня есть таблица со столбцом "Категория", которая отображается с помощью JComboBox. Эта таблица содержит статьи расходов и называется «Таблица расходов». JComboBox создается следующим образом: JComboBox(new DefaultComboBoxModel()).

public class Expense {
  Tag category;
}

class Tag {
  String name;
}

Я хотел настроить категории. Поэтому я создал таблицу «Категории» для добавления, удаления возможных значений в категории. Эта таблица использует TagTableModel и работает с данными поля, которое содержит значение ArrayList.

class TagTableModel 
  extends AbstractTableModel {
    ArrayList<Tag> data;
    ...
}

Как только пользователь изменяет значение в таблице «Категории»: добавляет категорию, удаляет категорию, редактирует столбец «Имя» в некоторой строке, я хотел бы, чтобы значения в JComboBox также обновлялись.

Каковы возможные способы заставить JComboBox полагаться на значения из TagTableModel?


person Developer Marius Žilėnas    schedule 24.07.2013    source источник
comment
вы можете вернуть значение из столбца (столбцов), из AbstractTableModel на основе util.List, но тогда могут быть дубликаты, вы уверены, что значение в столбце не может содержать дубликаты, во всех случаях вам нужно вычислять с помощью .. ..   -  person mKorbel    schedule 24.07.2013
comment
реализовать TableModelListener, который обновляет модель комбо   -  person kleopatra    schedule 24.07.2013
comment
TableModelListener работал просто отлично! Спасибо. Как ответить на этот вопрос? :)   -  person Developer Marius Žilėnas    schedule 24.07.2013
comment
Как сделать ответ на этот вопрос? :) ожидание, если (@kleopatra) преобразует свой комментарий в ответ или опубликует собственный ответ (но тогда может быть принято в течение 2 дней, на самом деле не знаю, больше информации, читайте FAQ)   -  person mKorbel    schedule 24.07.2013
comment
вы можете ответить на свой вопрос :-) Немного конкретизируйте мой комментарий тем, что вы сделали, и опубликуйте его, чтобы другие могли найти, если они ищут что-то подобное   -  person kleopatra    schedule 24.07.2013


Ответы (1)


Спасибо @kleopatra за идею :)

Я использовал TableModelListener, как было предложено: создано

public class CategoryTableModelListener 
    implements TableModelListener
{
    public void tableChanged(TableModelEvent e) 
    {
        /** here I get changed row and access object that was in this row and has changed */
    }
}
person Developer Marius Žilėnas    schedule 24.07.2013
comment
Вероятно, было бы лучше написать одну модель, реализующую интерфейсы для обоих типов компонентов (ComboBoxModel и TableModel). Таким образом, у вас есть только один источник данных, и вам не нужно поддерживать две разные модели. - person maxdev; 02.12.2014