如何在应用程序的窗口之间切换并与控制器通信?



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

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

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

通常您不需要将ActionEventvar传递给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中将这些字段标记为public,而是创建处理如何显示值的public方法。

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

建议:使用选项卡面板应该这样做,JPanel只是一个Java容器,而JFrame应该是外部窗口,它们是不同的东西。在一个JFrame的顶部应该有几个JPanel。你的应用程序可以有多个JFrame。

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

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

也就是说,窗口应该是什么,JPanels,JFrames。。。?

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

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

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

相关内容

  • 没有找到相关文章

最新更新