getCelectedItem JComboBox с GlazedLists AutocompleteSupport возвращает значение NULL
Я немного новичок в программировании, поэтому извините, если есть несколько вещей, которые можно было бы сделать лучше. Мой комбинированный список успешно заполнен моим массивом строк, и автозаполнение работает нормально. Я просто не могу получить текст в поле со списком.
возвращает java.lang.NullPointerException
private ArrayList<String> arrRekening;
private ArrayList<String> arrEienaar;
private String[] sarrRekening;
private String[] sarrEienaar;
public NewConnectionPoint() {
arrAccount = new ArrayList<String>();
arrOwner = new ArrayList<String>();
FillCombo(arrAccount , "Owners", "OwnerName");
FillCombo(arrOwner , "Accounts", "AccountName");
sarrOwner= arrOwner.toArray(new String[arrOwner .size()]);
sarrAccount= arrAccount.toArray(new String[arrAccount.size()]);
JComboBox<String> comboAccount = new JComboBox<String>();
AutoCompleteSupport<String> supAccount = AutoCompleteSupport.install(comboRekening, GlazedLists.eventList(Arrays.asList(sarrAccount)));
supAccount.setStrict(true);
JComboBox<String> comboOwner = new JComboBox<String>();
AutoCompleteSupport<String> supOwner = AutoCompleteSupport.install(comboOwner,GlazedLists.eventList(Arrays.asList(sarrOwner)));
supOwner.setStrict(true);
JButton btnShow = new JButton("ShowSelectedr");
btnShow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
//Error occurs at this line
JOptionPane.showMessageDialog(null, comboOwner.getSelectedItem().toString());
});}
}
// Данные, загруженные в массивы из базы данных с помощью sql
private void FillCombo(ArrayList<String> ComboElements, String sTable, String sColumn){
try{
Data.changeQuery(sTable);// database connection fine returns and fills combobox
while(MyData.rs.next()){
String sReturn= MyData.rs.getString(sColumn);
ComboElements.add(sReturn);
}
}catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
}
1 ответ
Основная трудность, с которой вы здесь столкнулись, заключается в том, что вы пытаетесь использовать пакет GlazedLists без должного использования его основной утилиты: EventLists.
Вы можете легко обойти ваши трудности, если будете использовать EventLists вместо ArrayLists.
Если вы действительно хотите, вы можете сохранить FillCombo
метод, возвращающий ArrayList (возможно, лучше назвать как getElements()
), но сразу же инициируйте EventList, используйте EventComboBoxModel GlazedLists, чтобы связать EventList с JComboBox, и тогда вы увидите, что ваш комбинированный список getSelectedItem() должен работать нормально.
Модифицированный код для подключения списка к комбинированному списку с поддержкой автозаполнения будет выглядеть примерно так:
...
FillCombo(arrOwner , "Owners", "OwnerName");
EventList<String> ownerEventList = GlazedLists.eventList(arrOwner);
EventComboBoxModel<String> ownerModel = new EventComboBoxModel<String>(ownerEventList);
JComboBox comboOwner = new JComboBox(ownerModel);
AutoCompleteSupport<String> supOwner = AutoCompleteSupport.install(comboOwner,ownerEventList);
supOwner.setStrict(true);
...