如何将信息从一个视图(可停靠)传递到另一个视图?

时间:2016-03-11 15:00:46

标签: java javafx drombler-fx

我正面临设计问题。如果我(例如)在左侧可停靠视图中包含一些包含一些pojo的列表视图,如何通知中心可停靠哪个被选中?我正在尝试实现某种Master-Detail-View,其中用户选择一个项目,然后可以在中心区域和右侧区域配置它。 在此先感谢:)

1 个答案:

答案 0 :(得分:0)

这取决于您希望如何设计应用程序。

如果您想为每个pojo创建一个单独的编辑器,那么您可以查看drombler fx archetype为样本提供的LeftTestPane。

curl -XDELETE /logstash-2016.03.11/logevent/_query -d '
{
  "query": { "match_all": {}}
}'

目前没有用于选择已打开的编辑器的API,但请注意,编辑器目前正在针对问题#111所做的工作进行改进。

如果您想要一个详细视图,那么您可以使用Context Framework,它允许Dockables和Actions等组件以松散耦合的方式进行通信。

ListView应该实现LocalContextProvider并将选定的pojo保留在其本地Context中。

@FXML
private void onNewSampleAction(ActionEvent event) {
    sampleCounter++;
    Sample sample = new Sample("Sample " + sampleCounter);
    SampleEditorPane sampleEditorPane = new SampleEditorPane(sample);
    Dockables.inject(sampleEditorPane);
    Dockables.open(sampleEditorPane);
}

在这种情况下,DetailsView也应该注册为视图(单例),并实现LocalContextProvider以及ActiveContextSensitive

@ViewDocking(...)
public class ListView extends SomeNode implements LocalContextProvider {

    private final SimpleContextContent contextContent = new SimpleContextContent();
    private final SimpleContext context = new SimpleContext(contextContent);
    private MyPojo currentSelection;

    ...

    @Override
    public Context getLocalContext() {
        return context;
    }

    ...

    if (currentSelection != null){
        contextContent.remove(currentSelection);
    }
    currentSelection = <current selection>
    if (currentSelection != null){
        contextContent.add(currentSelection);
    }
    ...
}

查看drombler fx archetype为样本提供的RightTestPane。