主要内容 Swing窗口中常用的组件 页面布局 在 swing 中实现对话框 9.1 Swing 和 MVC (Model-View-Controller)模式 9.1.1 设计模式 模型:房间,窗户 视图:实际窗户在房间的展示效果 控制器:设计窗
主要内容
9.1 Swing 和 MVC (Model-View-Controller)模式
9.1.1 设计模式
模型:房间,窗户
视图:实际窗户在房间的展示效果
控制器:设计窗户的大小、位置、角度、制作材料
Swing 中用到的设计模式:
组合模式:多个组件包含在容器中
装饰模式:滚动条面板,传入现有的组件类,对现有类操作
策略模式:布局管理器,面板和固定的,通过参数传入内部组件的排列方式
9.1.2 MVC 模式
组件三要素
内容:这个页面有什么组件,当前的组件状态是怎样的。比如按钮,按钮是否按下。
外观:颜色、大小
行为:进行某种底层事件或表意事件时,对事件的反应
为了更好的完成组件功能,分离类的职责,把类分为三种:
M(Model) :存储内容,具体现在流行翻译为模型,实际是包含了结构和内容两种存储
V(View): 展示内容,把存储内容取出筛选,部分货全部展现给用户
C(Controller): 处理事件,修改展示内容或者修改存储内容,完成用户期望的操作
9.1.3 Swing 按钮的 MVC 分析
DefaultXXModel 是组件默认展示的模型,比如DefaultButtonModel
为了方便,直接继承这个类 DefaultButtonModel ,我们把这个按钮是否能点击设置为false
import javax.swing.*;import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Main {
public static void main(String[] args){
Main solution = new Main();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MyFrame f = new MyFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
});
}
}
class MyFrame extends JFrame {
public MyFrame(){
setSize(300,200);
MyPanel p = new MyPanel();
add(p);
}
}
class MyPanel extends JPanel{
public MyPanel(){
JButton b = new JButton("test");
b.setBounds(new Rectangle(140,90,20,20));
b.setModel(new MyButtonModel());
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
b.setBackground(Color.RED);
}
});
add(b);
}
}
class MyButtonModel extends DefaultButtonModel{
public MyButtonModel(){
setEnabled(false);
}
}
它的好处在于,可以为类似的控件设置统一的默认格式,从而减少重复设置的代码冗余
相关内容:选择 《Java核心技术 卷1》查找相关笔记
喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。
关注公众号,互相学习:钰娘娘知识汇总
【文章原创作者:阿里云代理商 http://www.558idc.com/aliyun.html 网络转载请说明出处】