gpt4 book ai didi

java - 我怎样才能更好地清理和组织我的 View (MVC)

转载 作者:行者123 更新时间:2023-12-02 08:01:00 24 4
gpt4 key购买 nike

所以我使用 Observer/Observable 方法掌握了 Java 中的基本 MVC 模式。现在,为了保持它的干净和可读,在我继续关于如何很好地组织我的 View 之前,我想要一些指示,因为这是我的类最填满的地方。我们在学校被告知要将每个类的文件大小保持在 20kb 以下,以保持其可读性以及以后更易于维护。

这是我的观点:

package view;

import model.*;
import helper.*;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.util.Observable;
import java.util.Observer;
import net.miginfocom.swing.MigLayout;


public class View extends JFrame implements Observer
{
private Model model;

private JPanel left = new JPanel(new MigLayout());
private JPanel center = new JPanel(new MigLayout());
private JPanel right = new JPanel(new MigLayout());

private void setConstraints()
{
this.left.setMinimumSize(new Dimension(252, 540));
this.left.setMaximumSize(new Dimension(252, 37500));

this.center.setMinimumSize(new Dimension(298, 540));

this.right.setMinimumSize(new Dimension(250, 540));
this.right.setMaximumSize(new Dimension(250, 37500));
}

//Left panel contents
private Towers box = new Towers();
private Modules tree = new Modules();

private JPanel setupLeft()
{
this.left.add(this.box, "growx, pushx, wrap");
this.left.add(new JScrollPane(this.tree), "grow, push");
return this.left;
}

//Center panel contents
private Browser browser = new Browser();

private JPanel setupCenter()
{
this.center.add(new JScrollPane(this.browser), "grow, push");
return this.center;
}

//Right panel contents
private JLabel tower = new JLabel("No tower selected.");
private JLabel cap = new JLabel("Capacitor");
private JLabel cpu = new JLabel("CPU");
private JLabel shield = new JLabel("0");
private JLabel armor = new JLabel("0");
private JLabel em = new JLabel("0.0");
private JLabel th = new JLabel("0.0");
private JLabel kn = new JLabel("0.0");
private JLabel ex = new JLabel("0.0");

private JPanel setupRight()
{
this.right.add(this.tower, "span, wrap");
this.right.add(this.cap, "span, wrap");
this.right.add(this.cpu, "span, wrap");
this.right.add(this.shield, "span, wrap");
this.right.add(this.armor, "span, wrap");
this.right.add(this.em, "span, wrap");
this.right.add(this.th, "span, wrap");
this.right.add(this.kn, "span, wrap");
this.right.add(this.ex, "span, wrap");
return this.right;
}

public View(Model ui_model)
{
model = ui_model;

this.setTitle("MVC Experiment 6");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setMinimumSize(new Dimension(800, 600));
this.setLayout(new MigLayout());

this.setConstraints();

this.add(this.setupLeft(), "dock west");
this.add(this.setupCenter(), "dock center");
this.add(this.setupRight(), "dock east");
}

//Left panel contents - Listeners and methods for addressing JComponents
public void xTowersBrowser(ActionListener event)
{
this.box.addActionListener(event);
}

public void xModulesBrowser(MouseListener event)
{
this.tree.addMouseListener(event);
}

public Towers getTowersBrowser()
{
return this.box;
}

public Modules getModulesBrowser()
{
return this.tree;
}
//Left panel - END

//Center panel - components :: listeners and methods
public void xBrowser(MouseListener event)
{
this.browser.addMouseListener(event);
}

public Browser getBrowser()
{
return this.browser;
}
//Center panel - END

public void update(Observable o, Object arg)
{

}
}

任何关于在新类中分隔什么或如何最小化代码的建议都是有帮助的。这只是我的主 View 类的一部分,仍然缺少很多 JComponent,所以它会变得更加困惑。

最佳答案

我借此机会展示我理想的 MVC 想法。

组件之间的连接可以受益于类 EventHandler 的简洁性,http://docs.oracle.com/javase/6/docs/api/java/beans/EventHandler.html .

让我们将 GUI 限制为 java swing。

  • GUI 构建器,特别是如果它们生成表单文件(最好是 XML 或 Java FX 格式),可能是可行的,因为它们提供了纯粹的层次结构。规范的排序。
  • 可以创建组件(JPanel、MyJTextPane)来组合 View 并预定义样式属性。

为了集成 MVC,需要有一个模型,可能由子模型组成。并且可以有一个抽象 View 类,可能由 subview 组成。这个抽象 View 类是所有 swing 组件/ subview 的工厂,由 Controller 注入(inject)模型和绑定(bind)。

在 GUI 构建器中,可以使用自定义创建代码 view.a.create() 添加 JTextField a。在 initComponents 之后,可以调用 view.checkRequiredCreated() ,这可能会在缺少创建时抛出信息异常。

关于java - 我怎样才能更好地清理和组织我的 View (MVC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8901261/

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