2013-04-09 3 views
0

Я создаю приложение Fruit and Vedg, которое позволяет пользователям выбирать из выпадающих ящиков. Мой JComboBox subComboBox будет заполняться, если я использую String [], а не ArrayList. Любые мысли или документы, которые я мог бы рассмотреть? С кодом ниже subComboBox пуст.JComboBox не заполняется из Hashtable и ArrayList

public class FruitAndVedg extends JFrame implements ActionListener, ItemListener { 

private static final long serialVersionUID = 4L; 
private JComboBox mainComboBox; 
private JComboBox subComboBox; 
private ArrayList item; 
private Hashtable<ArrayList<Object>, Object> subItems = new Hashtable<>(); 

public FruitAndVedg() { 
    item = new ArrayList(); 
    item.add("Select Item"); 
    item.add("Fruit"); 
    item.add("Vedg"); 

    mainComboBox = new JComboBox(item.toArray()); 
    mainComboBox.addActionListener(this); 
    mainComboBox.addItemListener(this); 
    getContentPane().add(mainComboBox, BorderLayout.WEST); 

    subComboBox = new JComboBox(); 
    subComboBox.setPrototypeDisplayValue("XXXXXXXXXX"); 

    getContentPane().add(subComboBox, BorderLayout.CENTER); 
    String[] subItems1 = {"Select Fruit", "Apple", "Plum"}; 
    subItems.put(item, subItems1); 

    String[] subItems2 = {"Select Vedg", "Carrot", "Peas"}; 
    subItems.put(item, subItems2); 
} 

@Override 
public void actionPerformed(ActionEvent ae) { 
    String item = (String) mainComboBox.getSelectedItem(); 
    Object o = subItems.get(item); 
    if (o == null) { 
     subComboBox.setModel(new DefaultComboBoxModel()); 
    } else { 
     subComboBox.setModel(new DefaultComboBoxModel((String[]) o)); 
    } 
} 

@Override 
public void itemStateChanged(ItemEvent ie) { 
    if (ie.getStateChange() == ItemEvent.SELECTED) { 
     if (ie.getSource() == mainComboBox) { 
      if (mainComboBox.getSelectedIndex() != 0) { 
      } 
     } 
    } 
} 

    public static void main(String[] args) { 
    JFrame frame = new FruitAndVedg(); 
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
} 
} 

Сообщ.

+0

Hashtable , Object>, должен изменить эти параметры в Hashtable и использовать (начиная с) тот же тип массива для всех элементов в HashTable, что означает item = new ArrayList(); назад к String [], потому что остальная часть alements - String [] – mKorbel

+0

В идеале я хотел бы превратить все String [] в ArrayLists. – user1783462

+0

'item.add (« Vedg »);' Сторона примечания: слово «растительный» не имеет «D». Не включайте аббревиатуру. –

ответ

1

My JComboBox subComboBox будет заполняться, если я использую String [], а не ArrayList.

По умолчанию ComboBoxModel не поддерживает ArrayList.

Вы можете использовать Вектор.

Если вы действительно хотите использовать ArrayList, вам необходимо создать пользовательскую модель. Или создайте цикл для добавления элементов из массива ArrayList в модель по одному. Создание настраиваемой модели не так сложно, просто скопируйте код для DefaultComboBoxModel и измените код на использование списка вместо Vector.

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