2015-02-25 2 views
0

мой кодКак поставить arraylist в combobox в java?

for (Customer cusList1 : cusList) { 
      int numAcc = cusList1.getAccNo(); 
      for (int c = 0; c<cusList.size(); c++) { 
       String arr [] = new String [numAcc]; 
       arr[c] = cusList1.getName(); 
       DefaultComboBoxModel RefCMB1 = new DefaultComboBoxModel(arr); //Assign Model data to ComboBoxes from Array 
       newNameCombo.setModel(RefCMB1); 
      } 
    } 

У меня есть сведения о клиенте в качестве ArrayList я хочу поставить имена на ComboBox. cusList - это имя ArrayList. newNameCombo - это имя combobox.

ответ

1

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

ArrayList<String> 

или

ArrayList<Customer> 

? Для первого вы можете попробовать:

ArrayList<String> list = ... 
JComboBox<String> comboBox = new JComboBox<>(new Vector<>(list)); 

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

Для последнего вы можете работать с DefaultListCellRenderer. См. this. Переопределите getListCellRendererComponent(), чтобы добавить клиента в свой JComboBox и выполнить его самостоятельно. (Это тем более желательный способ, как вы можете установить и получить клиент непосредственно.)

изменения: в соответствии с вашим кодом, я предлагаю следующее:

JComboBox<Customer> comboBox = new JComboBox<>(new Vector<>(cusList)); 
comboBox.setRenderer(new DefaultListCellRenderer() { 
    @Override 
    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
     JLabel label = (JLabel)super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus); 
     label.setText(((Customer)value).getName()); 
     return label; 
    } 
}); 
0

Вы не можете заполнить DefaultComboBoxModel с помощью ArrayList.

Вам необходимо преобразовать список в массив или вектор и перейти к конструктору.

JComboBox cmb_box = new JComboBox(cusList.toArray()); 
0

Вы можете использовать java.util.Vector вместо ArrayList , Вектор обычно представляет собой синхронизированный (потокобезопасный) ArrayList, он также реализует интерфейс List. Кроме того, изменения, внесенные в вектор, будут видны в JComboBox.

Vector<String> data = new Vector<>(); 
data.add("a"); 
data.add("b"); 
JComboBox<String> jComboBox = new JComboBox<>(data); 
data.add("c"); 
Смежные вопросы