0
点赞
收藏
分享

微信扫一扫

《Java 核心技术 卷1》 笔记 第九章 Swing 用户界面组件

看山远兮 2022-02-19 阅读 109

主要内容

  1. Swing窗口中常用的组件
  2. 页面布局
  3. 在 swing 中实现对话框

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》查找相关笔记

 喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。

 

举报

相关推荐

0 条评论