• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            oyjpArt ACM/ICPC算法程序設計空間

            // I am new in programming, welcome to my blog
            I am oyjpart(alpc12, 四城)
            posts - 224, comments - 694, trackbacks - 0, articles - 6
            Model-View-Controller, MVC模式的目的是將自己的用戶界面邏輯從業務邏輯中分離。通過這種實現,他可以重用業務邏輯,并且阻止界面中的修改對業務邏輯造成影響。

            下面這個實例正好體現了這一點。WorkPanel中的CommandButton被控制器LoginAction監聽,控制器控制model工作,Model工作得到結果,同時JWorkPanel監聽Model的工作,在試圖上做出相應的反應。





            package oyjpart.designpattern;

            import java.beans.PropertyChangeListener;
            import java.beans.PropertyChangeSupport;

            public class Model {
                
            private PropertyChangeSupport changeSupport = new PropertyChangeSupport(
                        
            this);

                
            private String login;

                
            private boolean loginStatus;

                
            private boolean password;

                
            public Model() {
                    loginStatus 
            = false;
                }


                
            public Model(PropertyChangeSupport changeSupport, String login, boolean loginStatus, boolean password) {
                    
            super();
                    
            this.changeSupport = changeSupport;
                    
            this.login = login;
                    
            this.loginStatus = loginStatus;
                    
            this.password = password;
                }

                
                
            void login(String login, String password) {
                    
            if(isLoginStatus()) {
                        setLoginStatus(
            false);
                    }
             else {
                        setLoginStatus(
            true);
                    }

                }


                
            /* (non-Javadoc)
                 * @see java.lang.Object#hashCode()
                 
            */

                @Override
                
            public int hashCode() {
                    
            final int PRIME = 31;
                    
            int result = 1;
                    result 
            = PRIME * result + ((login == null? 0 : login.hashCode());
                    result 
            = PRIME * result + (loginStatus ? 1231 : 1237);
                    result 
            = PRIME * result + (password ? 1231 : 1237);
                    
            return result;
                }


                
            /* (non-Javadoc)
                 * @see java.lang.Object#equals(java.lang.Object)
                 
            */

                @Override
                
            public boolean equals(Object obj) {
                    
            if (this == obj)
                        
            return true;
                    
            if (!super.equals(obj))
                        
            return false;
                    
            if (getClass() != obj.getClass())
                        
            return false;
                    
            final Model other = (Model) obj;
                    
            if (login == null{
                        
            if (other.login != null)
                            
            return false;
                    }
             else if (!login.equals(other.login))
                        
            return false;
                    
            if (loginStatus != other.loginStatus)
                        
            return false;
                    
            if (password != other.password)
                        
            return false;
                    
            return true;
                }


                
            /**
                 * 
            @return the loginStatus
                 
            */

                
            public boolean isLoginStatus() {
                    
            return loginStatus;
                }


                
            /**
                 * 
            @return the password
                 
            */

                
            public boolean isPassword() {
                    
            return password;
                }


                
            /**
                 * 
            @return the login
                 
            */

                
            public String getLogin() {
                    
            return login;
                }


                
            /**
                 * 
            @param login the login to set
                 
            */

                
            public void setLogin(String login) {
                    
            this.login = login;
                }


                
            /**
                 * 
            @param loginStatus
                 *            the loginStatus to set
                 
            */

                
            public void setLoginStatus(boolean loginStatus) {
                    
            boolean old = this.loginStatus;
                    
            this.loginStatus = loginStatus;
                    changeSupport.firePropertyChange(
            "model.loginStatus", old, loginStatus);
                    
                }


                
            /**
                 * 
            @param password
                 *            the password to set
                 
            */

                
            public void setPassword(boolean password) {
                    
            this.password = password;
                }


                
            /**
                 * 
            @return the changeSupport
                 
            */

                
            public PropertyChangeSupport getChangeSupport() {
                    
            return changeSupport;
                }


                
            /**
                 * 
            @param changeSupport the changeSupport to set
                 
            */

                
            public void setChangeSupport(PropertyChangeSupport changeSupport) {
                    
            this.changeSupport = changeSupport;
                }


                
            /**
                 * 
            @param arg0
                 * 
            @see java.beans.PropertyChangeSupport#addPropertyChangeListener(java.beans.PropertyChangeListener)
                 
            */

                
            public void addPropertyChangeListener(PropertyChangeListener listener) {
                    changeSupport.addPropertyChangeListener(listener);
                }


            }

            package oyjpart.designpattern;

            import java.awt.BorderLayout;
            import java.beans.PropertyChangeEvent;
            import java.beans.PropertyChangeListener;

            import javax.swing.Action;
            import javax.swing.JButton;
            import javax.swing.JLabel;
            import javax.swing.JPanel;

            public class WorkPanel extends JPanel implements PropertyChangeListener {
                
                
            private JPanel center;
                
            private JPanel buttonPanel = new JPanel();
                
            private JLabel loginStatusLabel = new JLabel();
                
                
            public WorkPanel(JPanel center) {
                    
            super();
                    
            this.center = center;
                    init();
                }

                
                
            private void init() {
                    setLayout(
            new BorderLayout());
                    add(center, BorderLayout.CENTER);
                    add(buttonPanel, BorderLayout.SOUTH);
                    add(loginStatusLabel, BorderLayout.NORTH);
                }


                
            public void propertyChange(PropertyChangeEvent e) {
                    
            if(e.getPropertyName().equals("model.loginStatus")) {
                        Boolean status 
            = (Boolean) e.getNewValue();
                        
            if(status.booleanValue()) {
                            loginStatusLabel.setText(
            "Login was successful");
                        }
             else {
                            loginStatusLabel.setText(
            "Login Failed");
                        }

                    }

                }

                
                
            public void addButton(String name, Action action) {
                    JButton button 
            = new JButton();
                    button.setText(name);
                    button.addActionListener(action);
                    buttonPanel.add(button);
                }

                
            }



            package oyjpart.designpattern;

            import java.awt.event.ActionEvent;

            import javax.swing.AbstractAction;

            public class LoginAction extends AbstractAction {
                
            private Model model;

                
            private CenterPanel panel;

                
            public LoginAction(Model model, CenterPanel panel) {
                    
            this.model = model;
                    
            this.panel = panel;
                }


                
            public void actionPerformed(ActionEvent arg0) {
                    System.out.println(
            "Login Action : " + panel.getLogin() + " "
                            
            + panel.getPassword());
                    
                    model.login(panel.getLogin(), panel.getPassword());
                }


            }


            package oyjpart.designpattern;

            import java.awt.HeadlessException;
            import java.awt.event.WindowAdapter;
            import java.awt.event.WindowEvent;

            import javax.swing.JFrame;

            public class Application extends JFrame {
                
            private Model model;

                
            /**
                 * 
            @param model
                 * 
            @throws HeadlessException
                 
            */

                
            public Application(Model model) throws HeadlessException {
                    
            super();
                    
            this.model = model;
                
                    CenterPanel center 
            = new CenterPanel();
                    WorkPanel work 
            = new WorkPanel(center);
                    
                    work.addButton(
            "login"new LoginAction(model, center));
                    work.addButton(
            "exit"new ExitAction());
                    model.addPropertyChangeListener(work);
                    setTitle(
            "MVC Pattern Application");
                    
                    getContentPane().add(work);
                    pack();
                    show();
                    addWindowListener(
            new WindowAdapter() {
                        
            public void windowClosing(WindowEvent e) {
                            System.exit(
            0);
                        }

                    }
            );
                }

                
                
            public static void main(String[] args) {
                    Model model 
            = new Model();
                    Application app 
            = new Application(model);
                }

            }


            package oyjpart.designpattern;

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

            public class CenterPanel extends JPanel {
                
            private JTextField login = new JTextField();
                
            private JTextField password = new JTextField();
                
                
            public CenterPanel() {
                    setLayout(
            new GridLayout(22));
                    add(
            new JLabel("login:"));
                    add(login);
                    add(
            new JLabel("password:"));
                    add(password);
                }


                
            public String getLogin() {
                    
            return login.getText();
                }


                
            public String getPassword() {
                    
            return password.getText();
                }

                
            }


            package oyjpart.designpattern;

            import java.awt.event.ActionEvent;

            import javax.swing.AbstractAction;
            import javax.swing.JFrame;
            import javax.swing.JOptionPane;

            public class ExitAction extends AbstractAction {

                
            public void actionPerformed(ActionEvent arg0) {
                    JFrame frame 
            = new JFrame();
                    
            int response = JOptionPane.showConfirmDialog(frame,
                            
            "Exit Application ?""Exit", JOptionPane.OK_CANCEL_OPTION);

                    
            if(JOptionPane.YES_OPTION == response) {
                        System.exit(
            0);
                    }

                }


            }

            Feedback

            # re: JAVA常用設計模式2 MVC [ Model-View-Controller ]  回復  更多評論   

            2008-01-17 13:11 by alpc62
            啊……看不懂啊……

            # re: JAVA常用設計模式2 MVC [ Model-View-Controller ]  回復  更多評論   

            2008-01-17 18:52 by oyjpart
            呃...

            # re: JAVA常用設計模式2 MVC [ Model-View-Controller ]  回復  更多評論   

            2008-07-21 17:12 by guangzhi0633@163.com
            謝謝 辛苦啦

            # re: JAVA常用設計模式2 MVC [ Model-View-Controller ]  回復  更多評論   

            2008-07-22 08:55 by oyjpart
            hehe...
            无码国内精品久久人妻蜜桃| 77777亚洲午夜久久多喷| 久久99精品久久久久久秒播| 国产激情久久久久影院| 久久精品无码一区二区日韩AV| 少妇久久久久久被弄到高潮| 久久一日本道色综合久久| 77777亚洲午夜久久多喷| 国产精品一区二区久久精品涩爱| 亚洲精品无码久久一线| 精品熟女少妇aⅴ免费久久| 亚洲国产精品一区二区久久hs| 国产精品久久久天天影视香蕉| 精品久久人人爽天天玩人人妻| 香蕉久久一区二区不卡无毒影院| 2020国产成人久久精品 | 久久青草国产精品一区| 色婷婷久久久SWAG精品| 亚洲国产精品久久久久网站| 日韩欧美亚洲综合久久| 久久国产热这里只有精品| 久久亚洲春色中文字幕久久久 | 久久AV高潮AV无码AV| 国产精品免费看久久久香蕉| 99国产精品久久| 久久精品国产亚洲AV无码娇色| 麻豆精品久久久久久久99蜜桃| a级毛片无码兔费真人久久| 国产午夜久久影院| 久久久国产精品亚洲一区| 亚洲综合精品香蕉久久网| 亚洲国产美女精品久久久久∴| 99精品国产99久久久久久97 | 精品国产乱码久久久久久郑州公司 | 日韩人妻无码精品久久久不卡| 伊人久久大香线蕉av不卡 | 久久久WWW成人免费精品| 国产成人精品久久| 久久免费精品视频| 久久久久久A亚洲欧洲AV冫| 理论片午午伦夜理片久久|