【问题标题】:How to switch between application's windows and communicate with the controller?如何在应用程序的窗口之间切换并与控制器通信?
【发布时间】:2011-06-05 09:37:32
【问题描述】:

在使用 Java 编写图形界面时,在应用程序的不同窗口之间切换的适当方式是什么,例如单击按钮时? IE。窗户应该是什么,JPanelsJFrames...?以及所有组件如何“看到”“域控制器”(将图形包链接到应用程序逻辑包的类)?

任何指南或参考将不胜感激。

【问题讨论】:

    标签: java model-view-controller user-interface


    【解决方案1】:

    您使用Controller 启动您的应用程序。在控制器的构造函数中,您将初始化要打开的第一个 GUI,比如说GUI_A

    private GUI_A gui_a = null;
    
    Controller() {
        gui_a = new GUI_A(this);
    }
    

    你可能注意到了,我用一个参数调用GUI_A 的构造函数:thisthis 引用当前类的实例,所以thisController 的类型。 GUI_A 的构造函数必须看起来像这样:

    private Controller controller = null;
    
    GUI_A(Controller ctrl) {
        controller = ctrl;
    }
    

    这是一种让Controller 知道 GUI 的简单方法。

    接下来你要做的是显示GUI_A

    gui_a.setVisible(true);
    

    如果您现在想要处理按钮点击,您可以这样做:

    首先,将 action-performed 方法添加到按钮。而且,作为 MVC 中的最佳实践,您不想在视图/GUI 中执行逻辑。因此,您还可以在 Controller 中为执行的操作创建一个相应的方法,并从您的 GUI 调用它:

    // Controller
    GUI_A_button1_actionPerformed(ActionEvent evt) {
        // Add your button logic here
    }
    
    // GUI_A
    button1_actionPerformed(ActionEvent evt) {
        controller.GUI_A_button1_actionPerformed(evt);
    }
    

    通常您不需要将 ActionEvent-var 传递给 Controller,因为您不会经常需要它。更多时候,你会从 TextField 中读取文本并将其传递给控制器​​:

    // Controller
    GUI_A_button1_actionPerformed(String text) {
        // Add logic for the text here
    }
    
    // GUI_A
    button1_actionPerformed(ActionEvent evt) {
        controller.GUI_A_button1_actionPerformed(textField1.getText());
    }
    

    如果您现在想从 Controller 访问您的 GUI_A 上的某些字段,请确保不要在您的 GUI 中将这些字段标记为公共,而是创建处理如何显示值的公共方法。

    【讨论】:

      【解决方案2】:

      最好的方法是使用动作。您可以将操作附加到每个控件。当用户操作发生时(例如单击按钮),将调用相应的操作。动作可以将调用委托给应用程序逻辑并调用图形组件(JFrams 等)。

      【讨论】:

        【解决方案3】:

        建议:使用 tabbed-panel 应该可以做到这一点,JPanel 只是一个 Java 容器,而 JFrame 应该是外部窗口,它们是不同的东西。在一个 JFrame 之上应该有几个 JPanel。您的应用可以有多个 JFrame。

        【讨论】:

          【解决方案4】:

          在使用 Java 编写图形界面时,在应用程序的不同窗口之间切换的适当方式是什么,例如单击按钮时?

          ActionListener 添加到按钮。在actionPerformed(ActionEvent)方法中,做需要做的事情。

          I.E.窗口应该是什么,JPanels,JFrames ......?

          我建议将主窗口设为JFrame,并为大多数其他元素使用JDialogJOptionPane。或者,可以通过多种方式将多个 GUI 元素添加到单个空间中 - CardLayoutJTabbedPaneJSplitPaneJDesktopPane/JInternalFrame、..

          所有组件如何“看到”“域控制器”(将图形包链接到应用程序逻辑包的类)?

          一种方法是在 UI 之间传递对对象的引用。

          【讨论】:

            猜你喜欢
            • 2016-03-24
            • 2023-03-09
            • 2011-07-02
            • 2018-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多