Hallo zusammen,
ich finde der SelectionService von RCP ganz toll und möchte es für meine JavaFX nachbauen. Ich habe auch schon eine Lösung, bin aber nicht sicher ob das schön ist, deswegen möchte ich eure Meinung nachfragen.
Die Idee von SelectionService ist, der speichert immer die aktuelle Selektierung einer View, e.g. TreeView, ListView etc.
Alle anderen Views die daran interessiert sind, sollen Zugriff zu dem Service haben und es holen, beziehungsweise, wenn die Selektierung stattegfunden hat, werden die registrierten Views informiert.
Ich habe an der Stelle Google Guava benutzt
Hier der SelectionService
Das Speichern der Selektierung über diese Klasse
Speichern der Selektierung geht dann wie folgt
Das Abhören der Selektierung
Hier eine Veranschaulichung direkt von der Eclipse Seite
Bitte um Vorschläge, gerne auch syntaktische clean code Verbesserung.
Vielen Dank.
lam
ich finde der SelectionService von RCP ganz toll und möchte es für meine JavaFX nachbauen. Ich habe auch schon eine Lösung, bin aber nicht sicher ob das schön ist, deswegen möchte ich eure Meinung nachfragen.
Die Idee von SelectionService ist, der speichert immer die aktuelle Selektierung einer View, e.g. TreeView, ListView etc.
Alle anderen Views die daran interessiert sind, sollen Zugriff zu dem Service haben und es holen, beziehungsweise, wenn die Selektierung stattegfunden hat, werden die registrierten Views informiert.
Ich habe an der Stelle Google Guava benutzt
Hier der SelectionService
Code:
public enum SelectionService {
INSTANCE;
private EventBus eventBus;
private SelectionService() {
eventBus = new EventBus();
}
public void register(Object object) {
eventBus.register(object);
}
public void unregister(Object object) {
eventBus.unregister(object);
}
public void setSelection(StructureSelection selection) {
eventBus.post(selection);
}
}
Das Speichern der Selektierung über diese Klasse
Code:
public enum StructureSelection {
INSTANCE;
private Object selection;
public Object getSelection() {
return selection;
}
public void setSelection(Object selection) {
this.selection = selection;
}
}
Speichern der Selektierung geht dann wie folgt
Code:
@Override
public void changed(ObservableValue<? extends Object> arg0, Object arg1, Object newValue) {
StructureSelection.INSTANCE.setSelection(newValue);
SelectionService.INSTANCE.setSelection(StructureSelection.INSTANCE);
}
Das Abhören der Selektierung
Code:
public class LabelView extends HBox{
private Label label = new Label("Hallo");
public LabelView() {
getChildren().add(label);
SelectionService.INSTANCE.register(this);
}
@Subscribe
public void onSelection(StructureSelection selection) {
label.setText(selection.getSelection().toString());
}
}
Hier eine Veranschaulichung direkt von der Eclipse Seite
Bitte um Vorschläge, gerne auch syntaktische clean code Verbesserung.
Vielen Dank.
lam