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);
});
}
}