gpt4 book ai didi

java - 具有多个相同 View 的 MVC

转载 作者:行者123 更新时间:2023-11-30 09:49:16 26 4
gpt4 key购买 nike

为了我的应用程序的目的,我需要创建几个相同的 View ,它们应该对相同的事件表现和响应。我应该实例化我需要的每个相同的 View 并将这个 View 列表保存在我的 Controller 中,还是有更好的方法来处理这个?谢谢。

最佳答案

据我了解...您应该按照自己的想法行事。

有一个你安装到 Controller 的 View 列表。如果事件发生,则遍历 View 列表并更新所有 View 。

EDIT1:这是一个非常简单的例子,展示了它是如何完成的。

import java.awt.Color;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ManyViewsTest
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
View v1 = new View();
View v2 = new View();
View v3 = new View();
View v4 = new View();
View v5 = new View();
JPanel contentPane = new JPanel();
contentPane.add(v1);
contentPane.add(v2);
contentPane.add(v3);
contentPane.add(v4);
contentPane.add(v5);
JFrame f = new JFrame();
f.setContentPane(contentPane);
f.setSize(800, 600);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Controller c = new Controller(f);
f.setVisible(true);
}
});
}
}

class Controller
{
private List<View> views;

public Controller(JFrame f)
{
this.views = new ArrayList<View>();
f.addMouseListener(mL);
for(Component c: f.getContentPane().getComponents())
{
if(c instanceof View)
views.add((View)c);
}
}

public void updateView(String text)
{
for(View v: views)
v.setLabelText(text);
}

private MouseListener mL = new MouseAdapter()
{
int pressCounter = 0;
@Override
public void mousePressed(MouseEvent e)
{
super.mousePressed(e);
updateView("mousePressed, pressCounter="+(++pressCounter));
}
};
}

class View extends JPanel
{
private static final long serialVersionUID = 1L;
private JLabel label;
public View()
{
this.label = new JLabel("Initialized");
label.setBorder(BorderFactory.createLineBorder(Color.GREEN));
add(label);
}
public void setLabelText(String text)
{
label.setText(text);
}
}

关于java - 具有多个相同 View 的 MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5887051/

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