Ich habe einen ComboViewer erstellt, der Projekttypobjekte enthält. Wenn ich ein Projekt auswähle, aktualisieren die Elemente desselben Composites wie der ComboViewer ihre Werte mit den ausgewählten Project-Elementen. Das Problem tritt auf, wenn ich versuche, ein Element der Combobox zu löschen. Ich aktualisiere die Liste, die ich mit der Methode setInput an den ComboViewer übergebe, und aktualisiere sie. Danach löst das addSelectionListener-Ereignis, das ich zu verwalten habe, wenn der Benutzer auf ein Element der Combo klickt, automatisch aus und erkennt, dass das Element null ist und eine NullPointerException verursacht. Wie kann ich den leeren Raum löschen, den die Combo beim Löschen eines Elements verlässt und den nächsten nehme?Wie lösche ich Elemente eines ComboViewers?
-Code
ich ein Ereignis erstellt haben, zu steuern, wenn ein Element der Combobox ausgewählt und die anderen Elemente des Verbund zu aktualisieren:
projectNameTextCombo.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event
.getSelection();
selectedProjectCombo = (Project) selection.getFirstElement();
updateEditionElements(selectedProjectCombo);
}
});
ich die Möglichkeit gegeben haben, zu löschen ComboViewer Element:
Button deleteProjectConfigButton = new Button(pluginPathCreatedComposite, SWT.NONE);
deleteProjectConfigButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
projectList.getProjectList().remove(selectedProjectCombo);
projectNameTextCombo.refresh();
}
der Code Projektklasse ist folgende:
public class Project {
private String name;
private String path;
private Integer quantity;
private List<ProjectDirectory> projectDirectoryList;
//Constructor
public Project(String name, String path, Integer quantity, List<ProjectDirectory> projectDirectoriesList) {
super();
this.name = name;
this.path = path;
this.quantity = quantity;
this.projectDirectoryList = projectDirectoriesList;
}
public Project() {
super();
// TODO Auto-generated constructor stub
}
//Getters & setters
}
Ich habe den ComboViewer Label-Anbieter, die Inhaltsanbieter und die setInput Daten definiert:
setContentProvider(ArrayContentProvider.getInstance());
setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
if (element instanceof Project && element != null) {
Project current = (Project) element;
return current.getName();
}
return super.getText(element);
}
});
den Combobox So füllt Ich benutze diese Funktion:
private void populateCombo(){
if(projectList != null){
//Returns a Project list
projectNameTextCombo.setInput(projectList.getProjectList());
//The first time update other composite elements manually
projectNameTextCombo.getCombo().select(0);
selectedProjectCombo = (Project) projectNameTextCombo.getElementAt(0);
updateEditionElements(selectedProjectCombo);
}
}
und die andere zu aktualisieren Verbundelemente Ich nutze diese Funktion:
private void updateEditionElements(Project project){
editProjectPathText.setText(project.getPath());
projectCompositeViewer.getTable().setEnabled(true);
projectCompositeViewer.setInput(project);
}
Danke.