我的项目遵循MVC模式。为了快速,我将只发布与我的问题相关的代码(不涉及模型)。解释如下。
Controller.java :
public class Controller {
public View myView;
public Controller() {
myView = new myJFrame(this);
}
public void displayViews() {
myView.display();
}
public void closeViews() {
myView.close();
}
}
View.java :
public abstract class View {
private Controller controller;
public View(Controller controller) {
super();
this.controller = controller;
}
public final Controller getController() {
return controller;
}
public abstract void display();
public abstract void close();
}
myJFrame.java :
public class myJFrame extends View {
private JFrame frame;
private JMenuBar myMenuBar;
public myJFrame(Controller controller) {
super(controller);
buildFrame();
}
private void buildFrame() {
frame = new JFrame();
menuBar = new JMenuBar();
...
}
@Override
public void close() {
frame.dispose();
}
@Override
public void display() {
frame.setVisible(true);
}
}
此代码完美无缺。但是,如果我不断添加组件,buildFrame()
方法将很快变为巨大,因此我想将其拆分并在每个Swing组件的新文件中创建一个新类。
问题是我希望我的组件保留对Controller的访问权限。 myFrame
扩展View
,因此可以随时调用getController()
方法。但是当我创建一个单独的文件时不再是这种情况。扩展View
似乎不是一种选择(此外,myMenuBar
已经扩展JMenuBar
,例如)。
你会建议什么?
答案 0 :(得分:3)
问题在于我希望我的组件保留对Controller的访问权限。
精细。为构成GUI的JPanel创建一个类,并通过各自的构造函数将View实例传递给它们。
除非重写组件方法,否则不应扩展Swing组件。你应该使用Swing组件。
构图而不是继承
您也不应该扩展View。传递视图的实例就足够了。
阅读这篇优秀的文章Sudoku Solver Swing GUI,以便更好地了解在构建Swing GUI时如何使用MVC模式。