使用Java编写图形界面时,在单击按钮时,在应用程序的不同窗口之间切换的适当方法是什么? I.E.窗户应该是什么,JPanels
,JFrames
......?所有组件如何看到“域控制器”(将图形包链接到应用程序逻辑包的类)?
任何指南或参考将不胜感激。
答案 0 :(得分:2)
您使用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);
如果你现在想要处理按钮点击,你可以这样做:
首先,将动作执行的方法添加到按钮。而且,由于它是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:
// 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());
}
如果您现在想要从GUI_A
访问Controller
上的某些字段,请确保不要在GUI中将字段标记为公共字段,而是创建处理如何显示值。
答案 1 :(得分:1)
最好的方法是使用Actions。您可以将操作附加到每个控件。当用户操作发生时(例如,单击按钮),将调用相应的Action。动作可以将调用更深入地委托给应用程序逻辑并调用图形组件(JFrams等)。
答案 2 :(得分:1)
建议:使用tabbed-panel应该这样做,JPanel只是一个Java容器,而JFrame应该是外部窗口,它们是不同的东西。 One JFrame上应该有几个JPanel。您的应用可以有多个JFrame。
答案 3 :(得分:1)
使用Java编写图形界面时,在单击按钮时,在应用程序的不同窗口之间切换的适当方法是什么?
在按钮上添加ActionListener
。在actionPerformed(ActionEvent)
方法中,执行需要完成的任务。
即。应该是什么样的窗户,JPanels,JFrames ......?
我建议将主窗口设为JFrame
,并为大多数其他元素使用JDialog
或JOptionPane
。或者,可以通过多种方式将多个GUI元素添加到单个空间中 - CardLayout
,JTabbedPane
,JSplitPane
,JDesktopPane/JInternalFrame
,..
所有组件如何看到“域控制器”(将图形包链接到应用程序逻辑包的类)?
一种方法是在UI之间传递对象的引用。