2014-12-07 55 views
0

什么是检查JComboBox中的重复项目并删除它们的最佳方法?根据我所研究的情况,这在Java中并没有真正得到解答。基本上,当我用观察者模式刷新我的JComboBox时,它会在更新时复制项目。我尝试过去除所有项目并重新放入项目的路线,但这会在修改项目信息时引发问题(需要很长时间才能完整解释)。删除重复的项目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(); 
} 

回答

1

试试这个

public void setCustomers(){ 

     customerCombo.removeAllItems(); 

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

       customerCombo.addItem(curr); 

     } 


    } 
+0

这已经在我的问题排除在外,因为它导致的细节,以当前选定客户的详细信息设置为组合的第一个客户修订。 – bSky 2014-12-07 20:20:31

+0

1+,对我来说似乎是一个很好的解决方案。 “它会导致修改细节,以将当前选定客户的详细信息设置为组合中的第一位客户 - 不知道这意味着什么。但是,如果您在选择某个项目时说要做一些处理,那么解决方案是删除ActionListener,更新组合框,然后将ActionListener添加回组合框 – camickr 2014-12-07 21:11:21

+0

@bSky将当前选定的客户保存在字段中在使用setCustomers重置视图之前,再次设置先前选择的客户 – 2014-12-08 03:27:47