0

是否有可能在一个屏幕中创建一定数量的窗口。每个窗口都有相同的布局,但内容不同。我想包含一个过滤器,以便我可以选择我想查看的窗口。现在我有一个有四个条目的表。对于每个条目,都会生成一个窗口,但这看起来很混乱。

final int i = this.table.size();
    for (int h = 1; h <= i; h++) {
        final Window win = new Window("Window" + h, new SecondView());
        this.getParent().getUI().addWindow(win);
    }

编辑:起点如所述。我有一个包含数据库内容的表。在此表中,我可以选择多行。对于每一行,应打开一个预定义的窗口。在这个窗口中,我有 textFields,它应该包含来自所选行的匹配属性的值。为了获得更好的结构,我想选择哪个窗口应该是可见的。

4

3 回答 3

0

感谢您的帮助,但同时我找到了另一个解决方案。

private void button_buttonClick(final Button.ClickEvent event) {

    final int i = this.table.getSelectedItems().size() - 1;
    for(int h = 0; h <= i; h++) {
        final int personId = this.table.getSelectedItems().get(h).getBean().getId();
        final Window win = new Window("Person", new SecondView(personId));
        this.getUI().addWindow(win);
    }

那就是按钮点击事件。

这是我的 SecondView 的构造函数

public SecondView(final int personId) {
    super();
    this.initUI();
    final Person myPerson = new PersonDAO().find(personId);
    this.fieldGroup.setItemDataSource(myPerson);
}

我遇到的最后一个问题是,对于每个选定的人/行,每个窗口都会单独显示。我的意图是只显示一个窗口,我可以在其中选择不同的选定人员/行。

于 2019-09-24T13:55:12.787 回答
0
final int i = this.table.size();
List<Window> windowList= new LinkedList<>();
for (int h = 1; h <= i; h++) {
    Window win = new Window("Window" + h, new SecondView());
    windowList.add(win);
}

然后稍后,您可以迭代列表并addWindow(...)使用removeWindow(...)正确的窗口实例

于 2019-09-24T09:39:42.263 回答
0

这是您需要做的:

1)从表中获取选定的项目。不是所选项目的数量,而是实际项目 -Person如果您的表是 Person 类型的实例。

2)迭代这些选定的项目。

2.a) 对于每个项目,创建一个新Window 项目并将该项目传递给您的构造函数SecondView,因此每个 SecondView 都可以显示该项目的值或将输入绑定到该 bean。

2.b) 将该窗口添加到 UI


由于我不太习惯该Table课程,因此我Grid在示例中使用了较新的课程。我确定该表有一些 API 来获取选定的行 - 请改用它。

Button openDetailWindowsButton = new Button("Open Details", click -> {
    Set<Person> selectedItems = grid.getSelectedItems();
    for (Person selectedItem : selectedItems) {
        Window win = new Window(selectedItem.getName(), new SecondView(selectedItem));
        this.getParent().getUI().addWindow(win);
    }
});
于 2019-09-24T13:16:35.583 回答