2016-12-19 4 views
0

Я хотел бы, чтобы заполнить ComboBox в Java, но:Java заполнить ComboBox

  • , когда я использую массив строк, я должен определить размер массива перед (это минус),
  • , когда я бы хотели бы использовать ArrayList, я не могу иметь пустые элементы с нулевыми значениями или я не могу пропустить идентификаторами:
 ArrayList<String> a = new ArrayList<String>(); 
     a.add(0, "hahah"); 
     a.add(1, "bleeeee"); 
     a.add(5, "cleeeee"); //this makes an error, when I change index to 2, it works 

     JComboBox supplierComboBox = new JComboBox(a.toArray()); 

Мой массив является, например:

[1] => "dog", 
[5] => "mouse", 
[8] => "cat". 
(some ids missing). 

THX.

+0

Почему вы не размещаете код? – Jobin

ответ

1

Вы не можете иметь индекс 5 без индексов 2, 3 и 4. Java либо генерирует исключение, либо равномерно заполняет все пропущенные индексы значениями null. Так что просто добавьте значения в 2, 3 и 4, и это должно сработать. Убедитесь, что нет других пропущенных индексов.

Чтобы удалить все нулевые значения в списке, попробуйте этот код:

public class RemoveNullValues { 
    private ArrayList<String> test = new ArrayList<String>(); 

    public RemoveNullValues() { 
     test.add("0"); 
     test.add(null); 
     test.add("1"); 
     test.add(null); 
     test.add(null); 
     test.add("2"); 
     test.add("3"); 
     test.add("4"); 
     test.add(null); 
     test.add("5"); 

     System.out.println("Before: " + test); 

     //Java 7 and below method: 
     test.removeAll(Collections.singleton(null)); 

     //Java 8+ method: 
     test.removeIf(Objects::isNull); 

     System.out.println("After: " + test); 
    } 

    public static void main(String[] args) { 
     new RemoveNullValues(); 
    } 
} 
+0

Спасибо за ответ. Я попробовал это и свою правду. Но когда я загружал элементы из базы данных, а некоторые элементы были удалены, тогда некоторые идентификаторы отсутствовали :-(... и это причина, почему я не могу использовать Arraylist. Или я должен настроить его, но я не знаю, как это сделать. – steelbull

+0

@steelbull Я отредактировал свой ответ и добавил решение для удаления нулевых значений. –

0

Вы можете создать экземпляр выпадающего без детей

JComboBox supplierComboBox = new JComboBox(); 

, а затем добавить ребенок в течение цикла:

ArrayList<String> a = new ArrayList<String>(); 
a.add("hahah"); 
a.add("bleeeee"); 
a.add("cleeeee"); 
for (String value : a) { 
    supplierComboBox.addItem(value); // you can put every kind of object in "addItem" 
} 

Некоторые примеры (если вам нужно поле ID):

Использование Map.Entry

ArrayList<Map.Entry<Integer, String>> a = new ArrayList<Map.Entry<Integer, String>>(); 
a.add(new AbstractMap.SimpleEntry<Integer, String>(0, "hahah")); 
a.add(new AbstractMap.SimpleEntry<Integer, String>(1, "bleeeee")); 
a.add(new AbstractMap.SimpleEntry<Integer, String>(5, "cleeeee")); 
for (Map.Entry<Integer, String> value : a) { 
    supplierComboBox.addItem(value); 
} 

Использование MyClass:

public class MyClass{ 
    private Integer id; 
    private String value; 

    public MyClass(Integer id, String value) { 
     this.id = id; 
     this.value= value; 
    } 

    // Getters & Setters 
} 

, а затем:

ArrayList<MyClass> a = new ArrayList<MyClass>(); 
a.add(new MyClass(0, "hahah")); 
a.add(new MyClass(1, "bleeeee")); 
a.add(new MyClass(5, "cleeeee")); 
for (MyClass value : a) { 
    supplierComboBox.addItem(value); 
} 
+0

Да, но идентификаторы wil равны 0,1,2, и мне нужно 0,1,5 (как в примере). Мне нужно иметь правильные идентификаторы Поэтому метод add не применим для моего случая. :-( – steelbull

+0

Вы можете использовать объект (с двумя атрибутами, такими как «id» и «value») или Map.entry. – Dante

Смежные вопросы