gpt4 book ai didi

java - 带有子窗口的 MVC 模式

转载 作者:太空宇宙 更新时间:2023-11-04 10:27:22 24 4
gpt4 key购买 nike

在 Java 中,我有一个带有按钮的简单窗口。当我按下按钮时,我调用另一个类的构造函数,该类再次打开一个带有按钮的新窗口。1) 使用 Observer Observable 模式从 Model 类调用 View 类的方法是否正确?2)将新窗口的调用委托(delegate)给View类是否正确?或者我必须在模型类中执行此操作?3)如何为Controller类中的新按钮设置监听器?目前我调用 Controller 类的构造函数,我有一个 View 的实例(带有第一个按钮),但我仍然没有子窗口类的实例(因此还有第二个按钮)。

查看:

import java.awt.*;
import java.util.Observable;
import java.util.Observer;
import javax.swing.*;

public class View implements Observer
{
JFrame frame;
JPanel panel;
JButton button;

Model model;

public View(Model model)
{
frame = new JFrame();
panel = new JPanel();
button = new JButton("Press");
this.model = model;

panel.add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,500);
frame.add(panel);
frame.setVisible(true);
}

public void update(Observable ob, Object extra_arg)
{
switch(model.method_var)
{
case 0:
NewWindow newwindow = new NewWindow();
}
}
}

型号:

import java.util.Observable;

public class Model extends Observable
{
int method_var;

public void newwindow()
{
method_var = 0;
setChanged();
notifyObservers();
}
}

Controller :

import java.awt.event.ActionEvent;

public class Controller
{
Model model;
View view;

public Controller(Model model, View view)
{
this.model = model;
this.view = view;

view.button.addActionListener(new Action());

model.addObserver(view);
}

class Action implements java.awt.event.ActionListener
{
public void actionPerformed(ActionEvent e)
{
model.newwindow();
}
}

}

新窗口:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class NewWindow
{
JFrame frame;
JPanel panel;
JButton button;

Model model;

public NewWindow()
{
frame = new JFrame();
panel = new JPanel();
button = new JButton("Press again");
this.model = model;

panel.add(button);
frame.setSize(100,100);
frame.add(panel);
frame.setVisible(true);
}
}

主要:

public class Main 
{
public static void main(String[] args)
{
Model model = new Model();
View view = new View(model);
Controller controller = new Controller(model, view);
}
}

最佳答案

恕我直言,所有逻辑都应该位于组件的 Controller 中。这就是他们的目的。这样做需要更多的努力,但也可以避免随着设计的发展而出现困惑。

关于java - 带有子窗口的 MVC 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50392672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com