javaautocompletenullpointerexceptionjcomboboxglazedlists

getSelectedItem JComboBox with GlazedLists AutocompleteSupport Returns Null


I'm a bit new to programming so sorry if there is a few things that could have been done better My combobox is successfully filled with my string array and the auto-complete works fine. I just cant get the text in the combobox.

returns 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());

    });}

}

//Data loaded into arraylists from a Database with 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);
}

}


Solution

  • The fundamental difficulty you're experiencing here is that you're trying to leverage the GlazedLists package without properly embracing it's core utility: EventLists.

    You can easily side-step your difficulties if you use EventLists rather than ArrayLists.

    If you really want to you can keep your FillCombo method returning an ArrayList (perhaps better name as getElements()) but straight-away initiate an EventList, use the GlazedLists EventComboBoxModel to link the EventList to the JComboBox and then you'll find your combobox getSelectedItem() should work fine.

    The modified code to hook a list up to a combobox with autocomplete support will look something like this:

    ...
    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);
    ...