JComboBoxes - Использование setModel для доступа к объектам (в Swing) - PullRequest
2 голосов
/ 13 октября 2010

Краткая справка, я использую Netbeans для разработки этого (у меня нет большого опыта работы с Swing и я потерял очки опыта при возможности получить скорость разработки). В Netbeans очевидно, что код, который вы можете изменить, чтобы запретить начинающим пользователям взламывать код, явно ограничен (что я однажды уже забавно сделал) Во всяком случае, у меня есть класс объектов, эти объекты имеют свойство имени. Внутри приложения я непосредственно инициализировал массив этих объектов и назвал их «вещами»;

Objects[] things = new Objects[2];
things[0] = new Objects("The first thing");
things[1] = new Objects("The second thing");

Содержимое и имена преднамеренно бессмысленны, так как это тест для проверки работоспособности (вместо того, чтобы разбирать частично написанную программу). После некоторых исследований и чтения я обнаружил, что «должен» загружать объекты в параметр setModel, используя следующий код:

    new javax.swing.DefaultComboBoxModel(things[].name)
//The above is the code to use within setModel, the below is the completed example
    jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(things[].name));

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

Буду признателен за любые предложения или даже указания, которые помогут мне сообразить это.

Ответы [ 2 ]

6 голосов
/ 13 октября 2010

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

jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(things[]));

У вас есть несколько вариантов:)

  1. Быстрое и простое переопределение toString длявозвращаемое имя (при условии, что Objects - ваш класс)
  2. Создайте класс-оболочку (ObjectsWrapper), который в своем методе toString () возвращает имя объекта
  3. Модифицируйте JComboBox каким-либо образом, либо модель, либорендер, чтобы показать желаемое свойство
1 голос
/ 13 октября 2010

Разве просто реализация toString() на ваших объектах для возврата их свойства .name не работает с моделью Combo Box по умолчанию?

См. Аналогичный вопрос: Java Swing: Extend DefaultComboBoxModelметоды переопределения

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