簡體   English   中英

如何更好地清理和組織我的視圖(MVC)

[英]How can i clean and organize up my View (MVC) better

所以我使用Observer / Observable方法掌握了java中的基本MVC模式。 現在為了保持它的清潔和可讀性,我想在我繼續討論如何很好地組織我的視圖之前有一些指示,因為這是我的課程最充滿的地方。 我們在學校被告知要保持每個類的文件大小低於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類的一個缺失,仍然有很多JComponents丟失,所以它會變得更加凌亂。

我借此機會展示我理想的MVC創意。

組件之間的連接可以受益於EventHandler類的簡潔, http://docs.oracle.com/javase/6/docs/api/java/beans/EventHandler.html

讓我們將GUI限制為java swing。

  • GUI構建器,特別是如果它們生成表單文件,最好是XML或Java FX,可能是可行的,因為它們提供了純粹的分層組織。 規范的排序。
  • 可以創建組件(JPanel,MyJTextPane)來組合視圖和預定義樣式屬性。

為了集成MVC,有一個模型,可能由子模型組成。 人們可以擁有一個抽象的視圖類,可能由子視圖組成。 這個抽象視圖類是所有swing組件/子視圖的工廠,由控制器注入模型和綁定。

在GUI構建器中,可以添加JTextField a作為自定義創建代碼view.a.create() 在initComponents之后,可以調用view.checkRequiredCreated() ,這可能會在缺少的創建上引發一個信息性異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM