RxJavaSwing + MVVM с портретными пейзажными видами - PullRequest
0 голосов
/ 24 января 2020

В моем Java настольном проекте используется [RxJavaSwing] https://github.com/akarnokd/RxJavaSwing,

[RxJava3] https://github.com/ReactiveX/RxJava, в соответствии с архитектурой MVVM, предоставленной Петикочем примеры https://github.com/Petikoch/Java_MVVM_with_Swing_and_RxJava_Examples, способные легко реализовать приложение, основанное на программировании сокетов.

Теперь я хочу реализовать это для ландшафтного и портретного режимов. Есть ли способ реализовать это что-то вроде ниже изображения. Если это так,

1) Как передать 2 разных экземпляра вида в ViewModel (динамически при изменении ориентации).

2) Также я передаю объект вида в UsecaseImpl для замены панели. Вот и мне сейчас нужно пропустить 2 разных вида.

Заранее спасибо.

enter image description here

Код:

View view = new View();
UsecaseImpl useCaseImpl = new UseCaseImpl(view, defaultValues);
ViewModel viewModel = new ViewModel();
Model model = new Model(useCaseImpl);
viewModel.connectTo(model);        
view.bind(viewModel);    <br>

Также, как реализовать приведенный ниже код в MVVM на основе события из UsecaseImpl (в настоящее время оно используется в Util, общем для всех представлений)

public static void switchChildPanel(JPanel jPanelParent, JPanel jPanelChild) {
    if(jPanelChild.isShowing()) {
        return;
    }
    jPanelParent.removeAll();
    jPanelParent.add(jPanelChild);
    jPanelParent.repaint();
    jPanelParent.invalidate();
    jPanelChild.setVisible(true);
} 

1 Ответ

0 голосов
/ 03 февраля 2020

Я могу решить эту проблему, создав и передав 2 вида и связав их с ViewModel. Только представления - это разные экземпляры, а остальные - одинаковые.

PortraitView portraitView = new PortraitView();
LandscapeView landscapeView = new LandscapeView();
UsecaseImpl useCaseImpl = new UseCaseImpl(portraitView, landscapeView, defaultValues);
ViewModel viewModel = new ViewModel();
Model model = new Model(useCaseImpl);
viewModel.connectTo(model);        
portairView.bind(viewModel);
landscapeView.bind(viewModel);

switchChildPanel(JPanel jPanelParent, JPanel jPanelChild) Теперь я могу получить доступ к этому коду в Util, связанному с его представлением из usecaseImpl. Так что остается без изменений. Остальные компоненты пользовательского интерфейса обновляются в соответствии с потоком MVVM.

...