Java Swing 框架入门,打造一个属于自己的MVC架构

Java Swing 框架入门,打造一个属于自己的MVC架构

开发工具与关键技术:java、 elipse2019、jdk1.8 
作者:Amewin	
撰写时间:2019年8月7日

Swing编程简介

Swing开发的图形界面AWT跟家轻量级,使用100%的java开发不再依赖本地图形界面可以在所有平台保持相同的运行效果。

优点:

1、Swing组建不再依赖本地平台GUI无需采用各种平台的GUI交集,因此Swing提供大量图形界面组件

2、Swing组建不再依赖本地GUI不会产生平台相关bug

3、Swing组件在各种平台上运行可以保证具有相同的图形界面外观

4、Swing采用MVC(model-view-controller,模型-视图-控制器)设计模式,模型用于维护组件的状态,视图是组件的可视化表现,控制器用于控制各个事件,组件做出怎么样的响应。模型发生改变,它通知所有依赖它的视图,视图根据模型数据来更新自己。

Swing的基本组件

大部分Swing组件都是JComponent抽象类的直接或者间接子类,绝大部分都继承了Container类因此可以作为容器使用
Swing组件按照功能可以分为如下
1、顶层容器:JFrame,JApple,JDialog,JWindow
2、中间容器:JPanel,JSrollPane,JSplitPane,JToolBar等
3、特殊容器:JInternetFrame,JRootPane,JLayeredPane,JDestopPane等
4、基本组件:JButton,JComboBox,JList,LMenu,JSlider等
5、不可编辑信息的显示组件:JLabel,JProgressBar,JToolTip等
6、可编辑信息的显示组件:JTable,JTextArea,JTextField等
7、特殊对话框组件:JColorChooser,JFileChooser等

引用:https://blog.csdn.net/weixin_40311409/article/details/86704135

总结:上面介绍的是Swing 框架的简介和基础组件

下面我们将代码真正用起来这个框架 构建一个相对实用的MVC框架式Swing模板
由于要打造MVC 面模式类型的框架—先创建一个 AlgoFrame 的类,作为View层

import java.awt.*;
import javax.swing.*;
import java.awt.geom.Ellipse2D;

public class AlgoFrame extends JFrame{

    private int canvasWidth;//定义公共宽度
    private int canvasHeight;//定义公共高度
    //创建构造器
    public AlgoFrame(String title, int canvasWidth, int canvasHeight){

        super(title);

        this.canvasWidth = canvasWidth;
        this.canvasHeight = canvasHeight;

        AlgoCanvas canvas =new AlgoCanvas();
        //--创建一个新的2D 对象
        //canvas.setPreferredSize(new Dimension(canvasWidth,canvasHeight));
        setContentPane(canvas);
        pack();//--刷新内部器的大小
        // setSize(canvasWidth, canvasHeight);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//默认点击窗口关闭
        setResizable(false);//不允许改变窗口大小
        setVisible(true);//打开窗口
    }
    /**
     * 设置默认的窗口
     * @param title
     */
    public AlgoFrame(String title){
        this(title,1024,768);
    }

    //创建Get方法
    public int getCanvasWidth(){return canvasWidth;}
    public int getCanvasHeight(){return canvasHeight;}


    //画板
    private class AlgoCanvas extends JPanel{

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);

            Graphics2D g2d = (Graphics2D)g;

            int strokeWidth = 5;
            // 具体绘制 --开始--CAP_ROUND--用圆形装饰结束未封闭的子路径和划线段,半圆形的半径等于笔宽的一半。
            //--JOIN_ROUND--通过连接其广泛轮廓的外角与直线段来连接路段。
            g2d.setStroke(new BasicStroke(strokeWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));

            g2d.setColor(Color.RED);
            Ellipse2D circle = new Ellipse2D.Double(50, 50, 300, 300);
            g2d.draw(circle);//绘制一个空心的圆

            g2d.setColor(Color.BLUE);
            Ellipse2D circle2 = new Ellipse2D.Double(50, 50, 300, 300);
            g2d.fill(circle2);//绘制一个实心的圆
            // 具体绘制 --结束--
        }

        @Override
        public Dimension getPreferredSize(){
            return new Dimension(canvasWidth, canvasHeight);
        }
    }
 public static void main(String[] args) {

        EventQueue.invokeLater(() -> {
            AlgoFrame frame = new AlgoFrame("Welcome",500,500);
        });
    }

}




示例

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值