Предложение о том, как отладить ComboBoxModel - PullRequest
2 голосов
/ 16 августа 2011

в моем проекте у меня есть несколько JComboBox с их пользовательскими моделями.В основном они используются для отображения значений некоторых столбцов JTables (поэтому я решил реализовать их для относительного класса, расширяющего AbstractTableModel).

public class MyTableModel1 extends AbstractTableModel{

    protected class MyTableComboBoxModel1 extends AbstractListModel implements ComboBoxModel{

        private Object selected;
        @Override
        public Object getElementAt(int index) {
            return getValueAt(index, 1);
        }

        @Override
        public int getSize() {
            return getRowCount();
        }

        @Override
        public Object getSelectedItem() {
                 return this.selected;

        }

        @Override
        public void setSelectedItem(Object anItem) {
                     this.selected = anItem;
        }

    }
}

И у меня есть несколько моделей: MyTableModel2 с MyTableComboBoxModel2.Все эти модели выполняют одно и то же, за исключением некоторых дополнительных операций, не связанных ни с полем со списком, ни с самой таблицей.

Цель всего этого состоит в том, чтобы обновить отображаемые значения JComboBox в соответствии с изменениями, произошедшими относительноJTable.

Все отлично работает для моделей, которые я реализовал, за исключением одного случая, и после нескольких часов отладки я все еще не могу решить это.Код прослушиваемой модели практически идентичен остальным.Возможно, это ошибка где-то еще в моем коде, но я не могу понять, где.

Неправильный случай имеет следующее поведение: когда я изначально создал таблицу с некоторыми значениями, они правильно отображаются даже в JComboBox, но когда я добавляю новую строку, отображаемые значения становятся пустыми (размер отображаемого пустого меню правильный).Я обнаружил, что:

  1. правильно добавлена ​​новая строка jtable.
  2. метод getElementAt вызывается несколько раз при нажатии на JComboBox и возвращает все доступные значения (включаяновые).
  3. метод getSize () вызывается, когда я щелкаю JComboBox и возвращаю правильное обновленное значение
  4. Если JComboBox имеет фокус, я могу использовать стрелки, чтобы выбрать доступные элементы и всеэлементы могут быть выбраны (даже добавленные).
  5. Если я использую щелчок мыши случайным образом в одной точке в отображаемом пустом меню, можно выбрать все последние доступные записи.

У кого-нибудь есть идеи?Не могли бы вы подсказать мне, как я могу отлаживать в такой ситуации?К сожалению, я не могу опубликовать SSCCE .. Я надеюсь, что кто-то может помочь в любом случае ..

1 Ответ

2 голосов
/ 17 августа 2011

Я знаю, что мой вопрос немного расплывчатый

Именно поэтому требуется SSCCE.

В каждом поле со списком должны отображаться все значения определенного столбца существующей JTable

Я не понимаю, зачем вам нестандартная модель. Я думаю, вам просто нужно использовать TabelModelListener.

Всякий раз, когда значение добавляется / удаляется, вы обновляете поле со списком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...