Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

Model View Controller With S W I N G And J F X - Part 1

Discussion in 'Java Update' started by Joe, 24/11/19.

  1. Joe

    Joe Thành viên VIP

    Hi

    In general Model-View-Controller (MVC for short) is a framework that allows developers to design and test their GUI applications in a fast manner:

    - Model is designed by description in plain text which is usually in XML (eXtensible Markup Language) format. The reason that XML is chosen is its syntactical simplicity.
    - View is the visual form how the model looks like in reality. The "Viewer" is usually a small app that loads the model into a Modelling Mechanism which then produces (on the fly) the executable codes on a computer.
    - Controller is, as its name says, a controlling mechanism which triggers actions or events of expected processes and to verify how the processes function. Controller is a module that is usually loaded by the Viewer or by the Model-Loader. Usually actions and events are "injected" into some Model GUI-Components for some special purpose. The actions or events are triggered by the users.

    [​IMG]
    (source: Medium.com)

    The Model GUI-Components are in general the buttons, input fields, mouse/hand movements, keystrokes, etc. The injected actions or events are reactions on the hitting of the keys, the mouse click or the exerting of the buttons. MVC GUI Components are dependent on such "injection". Hence it's also called Dependency Injection.

    Before I discuss a bit more in details with you about MVC. I have some words about pure JAVA SWING MVC which is developed by myself (click HERE. The poll showed only one member who seems to have interst on this issue. The poll was closed on Nov. 24 2019.

    JAVA offers its users TWO kinds of MVC GUI Components: Java FX (or simply JFX) and Java SWING (or simply SWING). Only JFX is developed fully as a MVC framework while SWING is left aside and the non-action is exploited by software companies which fill the gap with their own products -the framework. Spring Boot is, for example, the most noted product in the JAVA community. You can follow the [series Spring Boot] from CongdongJava posted by Admin quydtkt.

    Nevertheless, MVC is a very complex technology and complexity is usually confusing for the newcomers. It preconditions that the learners are accomplished developers who master all the IT basics and GUI development. Those who just start to learn SWING or JFX run easily into a maze of rules and possibilities because Design is an innovative imagination. And imagination is abstract. Example: a lot of people can play guitar. But how many persons can play splendidly like this man`?



    It's the innovative (or intuitive) Imagination in Music. Same for the Model Design.

    Probably due to the complexity SWING was and is let "untouched" and becomes open for those who like the challenge to build a SWING MVC. There are some approaches like my own initiative HERE or Medium.com of Sylvain Saurel.

    To reduce the complexity and to keep the versatility I design SWING MVC model that "leans" against the known JFX technique:
    - Model in XML plain-text format (FXML)
    - View with the API Application
    - Controller is the development of "Dependency Injection"
    In my SWING model the XML syntax bases simply on 2 formats: <key> and </key> and the elements are assigned by plain texts or strings enclosed by 2 double-quotes. Example:

    PHP:
    <framename=MyFrame tittle="MVC with JDialog" size=600,600 location=20,20
            close
    =true resize=false</frame>
    - element name is the name of the frame (here: SWING JFrame)
    - element tittle is the tittle of the displayed JFrame
    - element size is the size of the JFrame
    - element location is the position of JFrame on the screen (upper left corner: 0,0 for X/Y)
    - element close JFrame is cloed on Exit
    - element resize JFrame is fixed or resizable

    Joe's SWING MVC in brief:

    I. MVC-Keywords for SWING J-Components

    The following SWING components are currently available:
    PHP:
    <frame> for JFrame
    <panel> for JPanel
    <dialog> for JDialog
    <tabbedpane> for JTabbedPane
    <button> for JButton
    <radiobutton> for JRadioButton
    <label> for JLabel
    <textfield> for JTextField
    <passwordfield> for JPasswordField
    <formattedtextfield> for JFormattedTextField
    <textarea> for JTextArea
    <combobox> for JComboBox
    <checkbox> for JCheckBox
    Because of lack of interest (one Yes for my poll :( ) I just slowdown the implementation of the other J-Components (e.g. JPopupMenu, JFileChooser, etc.).

    II. Rules

    - <keyword> elements </keyword>
    - comment always starts with // (double slashes) and ends at the end of the line (i.e. NewLine)
    - continue on next line is allowed
    - user is responsible for the structural locations (see: location)
    - case sensitive
    - either <frame> or <panel> or <dialog> and it must be the 1st line.
    - other J-Components (e.g. <label>, etc.) can be in any arbitrary order -except the reserved 1st line for JFrame, JPanel and JDialog
    - between keywords and values spaces should be avoided (e.g. location=10,20), as well as between values separated by comma (,)
    - String must be enclosed by double quotes
    - valid color for anyColor: red, blue, cyan,green, black, gray, darkgray, magenta, white, pink, red, lightgray
    - given name must be unique among the other J-components

    III. MVC architecture

    - View: the main app with the "public static void main()" method
    - Model: a plain text file with the keywords
    - Controller: the part where actions, improvements (e.g. JDialog, JOptionPane, etc.)
    and event handling are developed

    VI. XML Syntax
    PHP:
    <frame>title="anyTitle" size=widthheight bgimage=imgName location=a,b
           resize
    =false close=false nolayout=false</frame>
    obligatorysize
    optional
    bgimagelocation (default 0,or upper left corner of screen) and resize,
              
    titleclose (default: true), nolayout (default true)
     
    <
    dialog>name=anyName tittle="anyTitle" load=panel.txt size=w,h location=x,y</dialog>
    obligatorynamesize
    optional
    location (absolute to screen), load (panelModel file), tittle
    Note
    : if location is omitted then setLocationRelativeTo(ownershould be used
          Controller
    Otherwise it would be at the upper left corner of the screen.
     
    <
    panel>name=name size=w,h location=x,y</panel>
    obligatorynamesizelocation
     
    Loading a JPanel model into a JFrame 
    or a JPanel or JDialog model
    <panel>name=anyName file=modelFile size=w,h location=x,y</panel>
    obligatorynamefilesizelocation
     
    <tabbedpane>name=name tabs=model_1.txt,...,model_X.txt tabtext="tex_1",...,"text_X"
                
    size=w,h location=x,y</tabbedpane>
    obligatoryname
    optional
    tabs (where model_X.txt is the loading JPanel for tabX), tabtext (header for tabX)
     
    <
    button>name=anyName text="anyText" size=w,h location=x,y icon=fName color=anyColor</button>
    obligatorynamesizelocation (relative to frame/panel), text or icon or both
    optional
    color
     
    <radiobutton>name=anyName text="anyText" size=w,h location=x,y icon=fName color=anyColor</radiobutton>
    obligatorynamesizelocation (relative to frame/panel), text or icon or both
    optional
    color
     
    <label>name=anyName text="anyText" size=w,h location=x,y icon=fName opaque=true color=anyColor</label>
    obligatorynamesizelocation (relative to frame/panel), text or icon or both
    optional
    opaque (default false), color
     
    <textfield>name=anyName text="anyText" size=w,h location=x,y column=n color=anyColor</textfield>
    obligatorynamesizelocation (relative to frame/panel)
    optionaltextcolor
     
    <textarea>name=anyName text="anyText" size=w,h location=x,y edit=false
              row
    =n column=n color=anyColor scroll=false</textarea>
    obligatorynamesizelocation (relative to frame/panel)
    optionaltextcolorscroll (default true), rowcolumnedit (default true)
     
    <
    combobox>name=anyName items="string_1",..,"string_X" color=anyColor size=w.h location=x,y</combobox>
    obligatorynamesizelocation
    optional
    itemscolor
    note
    only String as itemsOther things must be set by controller with add(item)
     
    <
    checkbox>name=anyName text="text" icon=file selicon=file disicon=file
             selected
    =true color=anyColor size=w,h location=x,y</checkbox>
    obligatorynamesizelocation,  text or icon or both
    optional
    colorselectedselicondisicon
     
    Last edited: 25/11/19

Chia sẻ trang này

Loading...