【发布时间】:2011-06-05 09:37:32
【问题描述】:
在使用 Java 编写图形界面时,在应用程序的不同窗口之间切换的适当方式是什么,例如单击按钮时? IE。窗户应该是什么,JPanels,JFrames...?以及所有组件如何“看到”“域控制器”(将图形包链接到应用程序逻辑包的类)?
任何指南或参考将不胜感激。
【问题讨论】:
标签: java model-view-controller user-interface
在使用 Java 编写图形界面时,在应用程序的不同窗口之间切换的适当方式是什么,例如单击按钮时? IE。窗户应该是什么,JPanels,JFrames...?以及所有组件如何“看到”“域控制器”(将图形包链接到应用程序逻辑包的类)?
任何指南或参考将不胜感激。
【问题讨论】:
标签: java model-view-controller user-interface
您使用Controller 启动您的应用程序。在控制器的构造函数中,您将初始化要打开的第一个 GUI,比如说GUI_A:
private GUI_A gui_a = null;
Controller() {
gui_a = new GUI_A(this);
}
你可能注意到了,我用一个参数调用GUI_A 的构造函数:this。 this 引用当前类的实例,所以this 是Controller 的类型。 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 中将这些字段标记为公共,而是创建处理如何显示值的公共方法。
【讨论】:
最好的方法是使用动作。您可以将操作附加到每个控件。当用户操作发生时(例如单击按钮),将调用相应的操作。动作可以将调用委托给应用程序逻辑并调用图形组件(JFrams 等)。
【讨论】:
建议:使用 tabbed-panel 应该可以做到这一点,JPanel 只是一个 Java 容器,而 JFrame 应该是外部窗口,它们是不同的东西。在一个 JFrame 之上应该有几个 JPanel。您的应用可以有多个 JFrame。
【讨论】:
在使用 Java 编写图形界面时,在应用程序的不同窗口之间切换的适当方式是什么,例如单击按钮时?
将ActionListener 添加到按钮。在actionPerformed(ActionEvent)方法中,做需要做的事情。
I.E.窗口应该是什么,JPanels,JFrames ......?
我建议将主窗口设为JFrame,并为大多数其他元素使用JDialog 或JOptionPane。或者,可以通过多种方式将多个 GUI 元素添加到单个空间中 - CardLayout、JTabbedPane、JSplitPane、JDesktopPane/JInternalFrame、..
所有组件如何“看到”“域控制器”(将图形包链接到应用程序逻辑包的类)?
一种方法是在 UI 之间传递对对象的引用。
【讨论】: