12
返回列表 发新帖
楼主: 臧圩人

《Head First设计模式》阅读笔记.第十二章

[复制链接]
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
11#
 楼主| 发表于 2010-4-12 15:26 | 只看该作者
/**
* 视图
*
* @author zangweiren 2010-4-12
*
*/
public class BallView implements Observer {
        private BallController controller;
        private Ball ballModel;

        private JButton move;
        private JButton stop;
        private JButton speedUp;
        private JButton slowDown;

        private JFrame main = new JFrame();
        private JPanel ballPanel;
        private JButton ball;
        private JLabel speed;

        private boolean moving = false;

        public BallView(BallController controller, Ball ballModel) {
                this.controller = controller;
                this.ballModel = ballModel;
                this.ballModel.registerObserver(this);
                initView();
                showBall();
        }

        private void drawBall(int x, int y) {
                ball.setLocation(x, y);
        }

        private void initView() {
                main.setTitle("MVC Pattern");
                main.setSize(300, 200);
                main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                main.setResizable(false);

                move = new JButton("Move");
                stop = new JButton("Stop");
                speedUp = new JButton(">>");
                slowDown = new JButton("<<");

                ballPanel = new JPanel();
                ball = new JButton();
                ball.setBackground(Color.RED);
                ball.setEnabled(false);
                ball.setSize(20, 20);
                ball.setLocation(0, 50);

                JPanel p = new JPanel();
                p.add(move);
                p.add(slowDown);
                p.add(speedUp);
                p.add(stop);
                stop.setEnabled(false);

                speed = new JLabel("Current speed:" + ballModel.getSpeed());
                JPanel speedPanel = new JPanel();

                speedPanel.add(speed);
                main.getContentPane().add(speedPanel, BorderLayout.NORTH);
                ballPanel.add(ball);
                main.getContentPane().add(ballPanel);
                ballPanel.setLayout(null);
                main.getContentPane().add(p, BorderLayout.SOUTH);
                main.setVisible(true);

                move.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                controller.move();
                        }
                });
                stop.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                controller.stop();
                        }
                });
                speedUp.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                controller.speedUp();
                        }
                });
                slowDown.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                controller.slowDown();
                        }
                });
        }

        public void setMoveButtonEnable(boolean b) {
                move.setEnabled(b);
        }

        public void setMoving(boolean b) {
                this.moving = b;
        }

        public void setStopButtonEnable(boolean b) {
                stop.setEnabled(b);
        }

        public void showBall() {
                new Thread() {
                        @Override
                        public void run() {
                                int x = 0;
                                int y = 50;
                                while (true) {
                                        if (!moving) {
                                                continue;
                                        }
                                        drawBall(x, y);
                                        try {
                                                if (ballModel.getSpeed() != 0) {
                                                        Thread.sleep(1000 / ballModel.getSpeed());
                                                        x++;
                                                        if (x > 290) {
                                                                x = 0;
                                                        }
                                                } else {
                                                        Thread.sleep(1000);
                                                }
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                }
                        }
                }.start();
        }

        @Override
        public void speedChanged() {
                speed.setText("Current speed:" + ballModel.getSpeed());
        }
}

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
12#
 楼主| 发表于 2010-4-12 15:27 | 只看该作者
/**
* 控制器
*
* @author zangweiren 2010-4-12
*
*/
public class BallController {
        private Ball ballModel;
        private BallView view;

        public BallController(Ball ballModel) {
                this.ballModel = ballModel;
                this.view = new BallView(this, ballModel);
        }

        public void move() {
                ballModel.move();
                view.setMoveButtonEnable(false);
                view.setStopButtonEnable(true);
                view.setMoving(true);
                System.out.println("Ball is moving...");
        }

        public void slowDown() {
                ballModel.slowDown();
                System.out.println("Slow down:" + ballModel.getSpeed());
        }

        public void speedUp() {
                ballModel.speedUp();
                System.out.println("Speed up:" + ballModel.getSpeed());
        }

        public void stop() {
                ballModel.stop();
                view.setMoveButtonEnable(true);
                view.setStopButtonEnable(false);
                view.setMoving(false);
                System.out.println("Ball is stopped.");
        }
}

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
13#
 楼主| 发表于 2010-4-12 15:27 | 只看该作者
/**
* MVC测试类
*
* @author zangweiren 2010-4-12
*
*/
public class TestBallView {

        public static void main(String[] args) {
                Ball ballModel = new BallModel();
                new BallController(ballModel);
        }

}

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
14#
 楼主| 发表于 2010-4-12 15:27 | 只看该作者
OVER!

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
15#
 楼主| 发表于 2010-4-12 15:28 | 只看该作者
超经典的MVC模式,大概没有人没听说过吧。

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
16#
发表于 2010-4-12 23:14 | 只看该作者
nice job

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
17#
发表于 2010-4-12 23:31 | 只看该作者
原帖由 臧圩人 于 2010-4-12 15:28 发表
超经典的MVC模式,大概没有人没听说过吧。

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
18#
发表于 2010-4-12 23:37 | 只看该作者
还没读完啊

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
19#
 楼主| 发表于 2010-4-13 10:24 | 只看该作者
原帖由 justforregister 于 2010-4-12 23:37 发表
还没读完啊

快了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表