Rapidclipse - несколько окон на одном экране, используя фильтр для выбора - PullRequest
0 голосов
/ 24 сентября 2019

Есть ли возможность создать определенное количество окон на одном экране.Каждое окно имеет одинаковый макет, но разный контент.Я хотел бы включить фильтр, чтобы я мог выбрать, какое окно я хотел бы видеть.Прямо сейчас у меня есть таблица с четырьмя записями.Для каждой записи генерируется одно окно, но это выглядит довольно грязно.

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, которые должны содержать значения соответствующих атрибутов из выбранной строки.Чтобы получить лучшую структуру, я хочу выбрать, какое окно должно быть видимым.

Ответы [ 3 ]

0 голосов
/ 24 сентября 2019

Вот что вам нужно сделать:

1) извлечь выбранные элементы из таблицы.Не количество выбранных элементов, а фактические элементы - экземпляры Person, если ваша таблица имеет тип Person.

2) перебрать эти выбранные элементы.

2.a) Для каждого элемента создайте новый Window и передайте этот элемент в конструктор вашего SecondView, чтобы каждый SecondView мог отображать значения этого элемента или привязкивходы в этот боб.

2.b) Добавить это окно в пользовательский интерфейс


Так как я не очень привык к классу 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);
    }
});
0 голосов
/ 24 сентября 2019

Спасибо за вашу помощь, но тем временем я нашел другое решение.

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);
}

Последняя проблема, с которой я столкнулся, заключается в том, что для каждого выбранного человека / строки каждое окно отображается отдельно.Мое намерение состояло в том, чтобы показать только одно окно, где я могу выбирать между различными выбранными людьми / строками.

0 голосов
/ 24 сентября 2019
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(...) с правильным экземпляром окна

...