• java swing开发窗体程序开发(四)MVC结构


    MVC是一种设计结构(非设计模式,非设计原则)
    M:Model 模型层:即用于存储数据的对象
    V:View 视图层:即用于为模型提供数据显示的对象
    C:Controller 控制器层:即处理用户的业务逻辑(交互操作),对用户的操作做出相应,让模型和视图进行必要的交互。
    在java swing中可以理解为
    将某个对象视为“模型”,然后为该“模型”提供恰当的显示组件,即“视图”,为了响应用户的操作,让某个组件Listener作为“控制器”,当触发事件时,通过
    视图修改或得到模型中的数据,并让视图更新显示。

    以下是一个小案例,展示用MVC结构开发的窗体程序,每一部分都进行了分包处理


    public class SimpleListener implements ActionListener {
    private JTextArea resultArea;//视图显示结果
    private JTextField textFieldA;//输入的边
    private JTextField textFieldB;
    private JTextField textFieldC;

    public void setResultArea(JTextArea resultArea) {
    this.resultArea = resultArea;
    }

    public void setTextFieldA(JTextField textFieldA) {
    this.textFieldA = textFieldA;
    }

    public void setTextFieldB(JTextField textFieldB) {
    this.textFieldB = textFieldB;
    }

    public void setTextFieldC(JTextField textFieldC) {
    this.textFieldC = textFieldC;
    }

    /**
    * 触发该函数的只能是那一个按钮,所以不用ActionEvent去判定他的ActionCommand
    * @param e
    */
    public void actionPerformed(ActionEvent e)
    {
    //获得三条边值
    try {
    double a = Double.parseDouble(textFieldA.getText());
    double b = Double.parseDouble(textFieldB.getText());
    double c = Double.parseDouble(textFieldC.getText());
    //构建Model对象
    Triangle triangle=new Triangle(a,b,c);
    String areaStr=triangle.getArea();
    resultArea.append("面积是:"+areaStr+"\n");
    }catch (Exception exception)
    {
    System.out.println("解析数据发生异常。异常信息:"+e);
    resultArea.setText("请输入数字");//提示用户输入有误
    }

    }
    }
    public class Triangle {
    private double a;
    private double b;
    private double c;

    public Triangle(){}
    public Triangle(double a,double b,double c)
    {
    this.a=a;
    this.b=b;
    this.c=c;
    }

    /**
    * 模型自己的方法
    * @return
    */
    public String getArea()
    {
    //计算前应该判定是否是三角形,这里省略了
    //利用海伦公式求面积
    double p=(a+b+c)/2.0;
    double area=Math.sqrt(p*(p-a)*(p-b)*(p-c));
    return String.valueOf(area);
    }
    }

    public class SimpleWindow extends JFrame {
    private JTextField textFieldA;
    private JTextField textFieldB;
    private JTextField textFieldC;
    private JTextArea resultArea;
    private JButton caculateBtn;
    //Listener
    private SimpleListener simpleListener;

    public SimpleWindow()
    {
    //GUI部分
    setLayout(new BorderLayout());//使用东南西北中布局
    textFieldA=new JTextField(5);
    textFieldB=new JTextField(5);
    textFieldC=new JTextField(5);
    resultArea=new JTextArea();//
    caculateBtn=new JButton("计算");
    JPanel upPanel=new JPanel();//上面板
    upPanel.add(new JLabel("边A"));
    upPanel.add(textFieldA);
    upPanel.add(new JLabel("边B"));
    upPanel.add(textFieldB);
    upPanel.add(new JLabel("边C"));
    upPanel.add(textFieldC);
    upPanel.add(caculateBtn);
    add(upPanel,BorderLayout.NORTH);//将上面板加到该窗口的上部分
    add(new JScrollPane(resultArea),BorderLayout.CENTER);//将结果的多行输出加入滚动面板,再把滚动面板加入该窗口的中部分
    setVisible(true);
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    setBounds(100,100,460,260);
    //设置监听器
    simpleListener=new SimpleListener();
    simpleListener.setResultArea(resultArea);
    simpleListener.setTextFieldA(textFieldA);
    simpleListener.setTextFieldB(textFieldB);
    simpleListener.setTextFieldC(textFieldC);
    //添加监听器
    caculateBtn.addActionListener(simpleListener);
    }
    }
    import View.SimpleWindow;

    public class Main {
    public static void main(String []args)
    {
    SimpleWindow window=new SimpleWindow();
    }

    效果如下

    ————————————————
    版权声明:本文为CSDN博主「Abukuma~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/tanyu159/article/details/89137484

  • 相关阅读:
    js 判断中文输入法是否输入完成(系统自带输入法)
    Winform DataGridView中的Button点击事件
    利用sp_addlinkedserver实现远程数据库链接
    锐浪报表多个子报表赋值
    未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
    C# 中解决页面刷新后字体等变大问题
    QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式
    c#4.0 qrcode二维码生成 简单封装
    .net2.0 生成二维码
    c# 生成下部带文字的二维码
  • 原文地址:https://www.cnblogs.com/javalinux/p/14790642.html
Copyright © 2020-2023  润新知