Как я могу очистить и организовать мой View (MVC) лучше - PullRequest
0 голосов
/ 18 января 2012

Итак, я получил представление об основных шаблонах MVC в Java, используя метод Observer / Observable.Теперь, чтобы сохранить его в чистоте и удобочитаемом виде, я хотел бы получить несколько указателей, прежде чем перейти к вопросу о том, как правильно организовать свое представление, поскольку именно здесь мои классы заполнены наиболее полно.В школе нам сказали, что размер файла для каждого класса должен быть ниже 20 КБ, чтобы он был читабельным, а затем более легким в обслуживании.

Вот мое мнение:

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, поэтому он станет еще более беспорядочным.

1 Ответ

2 голосов
/ 20 января 2012

Я пользуюсь этой возможностью, чтобы представить свои идеальные идеи MVC.

Разводка между компонентами может выиграть от краткости класса EventHandler, http://docs.oracle.com/javase/6/docs/api/java/beans/EventHandler.html.

Давайте ограничим графический интерфейсto java swing.

  • GUI Builders, особенно если они генерируют файлы форм, предпочтительно в XML или Java FX, могут быть осуществимы, так как они обеспечивают чисто иерархическую организацию.Каноническое упорядочение.
  • Можно создавать компоненты (JPanel, MyJTextPane) для составления представлений и определения свойств стиля.

Для интеграции MVC используется модель, возможно, состоящая из подмоделей.И можно было бы иметь класс абстрактного представления, возможно, составленный из подпредставлений.Этот класс абстрактного представления является фабрикой всех компонентов / подпредставлений колебания, с внедрением модели и привязки контроллером.

В построителе GUI можно добавить JTextField a в качестве пользовательского создания.код view.a.create().После initComponents можно вызвать view.checkRequiredCreated(), что может вызвать информативное исключение для пропущенных созданий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...