2
我的應用程序的目的,我需要創建一個應該表現和應對相同的事件數相同的看法。我是否應該對每個需要的相同視圖進行instanciate,並在控制器中保存這個視圖列表,或者有更好的方法來處理這個視圖?謝謝。MVC與幾個相同的看法
我的應用程序的目的,我需要創建一個應該表現和應對相同的事件數相同的看法。我是否應該對每個需要的相同視圖進行instanciate,並在控制器中保存這個視圖列表,或者有更好的方法來處理這個視圖?謝謝。MVC與幾個相同的看法
從我的理解......你應該按照你的想法。
有您安裝到控制器的視圖列表。如果事件發生,請通過視圖列表並更新所有視圖。
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);
}
}
感謝您爲例。 – LionO 2011-05-04 17:54:14
@LionO沒問題,希望對你有用。祝你好運 – Boro 2011-05-04 17:55:16
+1在這個例子中,隱式_model_是一個'List'。在更典型的實施方式中,_controller_收聽_model_並通知任何註冊_view_進行自我更新,如圖[這裏](http://stackoverflow.com/questions/3066590/gui-problem-after-rewriting-to-mvc/3072979#3072979)。 –
trashgod
2011-05-04 20:05:53