Изменение содержания JComboBox

Вы можете использовать reduce и деструктуризацию следующим образом:

Идея состоит в том, чтобы создать объект с key как свойство name и значение в качестве конечных объектов, которые вам нужны в выводе. Таким образом, вы можете просто использовать Object.values для получения окончательного массива:

const arr=[{name:"aa",type:"total",count:28394},{name:"aa",type:"featured",count:4},{name:"aa",type:"noAnswers",count:5816},{name:"ba",type:"total",count:148902},{name:"ba",type:"featured",count:13},{name:"ba",type:"noAnswers",count:32527},{name:"cc",type:"total",count:120531},{name:"cc",type:"featured",count:6},{name:"cc",type:"noAnswers",count:24170}];

const merged = arr.reduce((acc,{name,type,count}) =>
  ((acc[name] = acc[name] || {name})[type] = count, acc)
,{})

console.log(Object.values(merged))

This эквивалентно:

const arr=[{name:"aa",type:"total",count:28394},{name:"aa",type:"featured",count:4},{name:"aa",type:"noAnswers",count:5816},{name:"ba",type:"total",count:148902},{name:"ba",type:"featured",count:13},{name:"ba",type:"noAnswers",count:32527},{name:"cc",type:"total",count:120531},{name:"cc",type:"featured",count:6},{name:"cc",type:"noAnswers",count:24170}];

/* Our goal is to create a merged object like this:
{
  "aa": {
    "name": "aa",
    "total": 28394,
    "featured": 4,
    "noAnswers": 5816
  },
  "ba": {
    "name": "ba",
    "total": 148902,
    ....
  },
  "cc": {
    "name": "cc",
     ......
  }
}

The advantage of using object accumulator is we can access it like this: acc[name]
*/

const merged = arr.reduce((acc, {name,type,count} /*Destructuring*/) => {
  /* if the accumulator doesn't have the current "name" key, 
   create new object
   else use the existing one;
   {name} is same as {name: name}
  */
  acc[name] = acc[name] || {name};
  
  /* To the inner object, 
      add a key with the "type" value and assign it to "count" value
  */
  acc[name][type] = count;
  
  // return the accumulator
  return acc;
}, {})

// use Object.values to get the value part of the merged obejct into an array
console.log(Object.values(merged))

13
задан user1329572 12 May 2012 в 14:49
поделиться

4 ответа

Если Вы хотите смочь добавить и удалить объекты из существующего поля комбинированного списка во времени выполнения, базовой моделью данных для поля комбинированного списка должен быть MutableComboBoxModel

Google для того класса для интерфейсной информации и для примеров того, как использовать его.

Обратите внимание, что, если Вы хотите, чтобы пользователь ввел в новых значениях, также необходимо сделать поле доступным для редактирования.

Можно найти некоторые ссылки на примеры здесь.

11
ответ дан 1 December 2019 в 22:58
поделиться

Конечно, Вы можете. Существует несколько методов для управления JComboBoxes с помощью модели списка по умолчанию. Взгляните на удаление* методы и добавьте* методы:

http://java.sun.com/javase/6/docs/api/javax/swing/JComboBox.html

2
ответ дан 1 December 2019 в 22:58
поделиться

Можно также заменить модель в целом setModel ().

Но после записи все большего количества пользовательских интерфейсов, я нахожу более полезным записать пользовательский ComboBoxModel для обертывания структуры данных, которую представляет ComboBox. Это - больше единицы, тестируемой и более чистой, по моему скромному мнению.

2
ответ дан 1 December 2019 в 22:58
поделиться

Библиотека Glazed Lists могущественная полезный, когда Вы хотите соединить любой вид проводом изменяемого списка к управлению GUI. Это - библиотека большого выхода, которая не может подходить для Вашего проекта, но смотреть на их скринкасты и судью для себя. Это поддерживает много связанного материала как фильтрация и автозавершение и может сохранить Вас большой физический труд.

0
ответ дан 1 December 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: