Удалить повторяющиеся элементы JComboBox

как лучше всего проверить наличие повторяющихся элементов в JComboBox и удалить их? На Java нет ответа на этот вопрос из того, что я исследовал. В основном, когда я обновляю свой JComboBox с помощью шаблона наблюдателя, он дублирует элементы при обновлении. Я попытался пойти по пути удаления всех элементов и их возврата, но это вызывает проблемы при изменении информации об элементе (полное объяснение займет много времени).

public void setCustomers()
{

 for (Customer curr : Main.getNewCustomerList().getCustomers())
{

    customerCombo.addItem(curr);

}


}


public void setDetails()
{
Customer selected = (Customer) customerCombo.getSelectedItem();
if(selected != null)
{
forenameText.setText(selected.getForename());
surnameText.setText(selected.getSurname());
costperkgText.setText(String.valueOf(selected.getDeliveryCost()));
line1Text.setText(String.valueOf(selected.getColAddress().getAddressLine1()));
line2Text.setText(String.valueOf(selected.getColAddress().getAddressLine2()));
cityText.setText(String.valueOf(selected.getColAddress().getCity()));
postcodeText.setText(String.valueOf(selected.getColAddress().getPostcode()));

}
else 
{
    ClearText();
}
}

public void ammendDetails()
{
Customer selected = (Customer) customerCombo.getSelectedItem();
if(selected != null)
{
selected.setForename(forenameText.getText());
selected.setSurname(surnameText.getText());
System.out.print(costperkgText.getText());
selected.setDeliveryCost(Double.valueOf(costperkgText.getText()));
Address newAddress = new Address(line1Text.getText(), line2Text.getText(), cityText.getText(), postcodeText.getText());
selected.setColAddress(newAddress);


}
else
{
  ClearText();        
}

}

 public void ClearText()
{
forenameText.setText("");
surnameText.setText("");
costperkgText.setText("");
line1Text.setText("");
line2Text.setText("");
cityText.setText("");
postcodeText.setText("");
}


@Override
public void update()
{
setCustomers();
}

person bSky    schedule 07.12.2014    source источник


Ответы (1)


попробуй это

  public void setCustomers(){

        customerCombo.removeAllItems();

        for (Customer curr : Main.getNewCustomerList().getCustomers()){

                 customerCombo.addItem(curr);

        }


    }
person user3598272    schedule 07.12.2014
comment
Это уже было исключено в моем вопросе, поскольку это приводит к изменению деталей, чтобы установить детали текущего выбранного клиента для первого клиента в комбо. - person bSky; 07.12.2014
comment
1+ мне кажется хорошим решением. it causes the amending of details to set the details of the current selected Customer to the first customer in the combo's - понятия не имею, что это значит. Но если вы говорите, что выполняете некоторую обработку, когда выбран элемент, тогда решение состоит в том, чтобы удалить ActionListener, обновить поле со списком, а затем добавить ActionListener обратно в поле со списком. - person camickr; 08.12.2014
comment
@bSky Сохраните текущего выбранного клиента в поле перед сбросом представления с помощью setCustomers, затем снова установите ранее выбранного клиента - person Radiance Wei Qi Ong; 08.12.2014