7.1 控制反转
图形界面GUI
- GUI给应用程序提供界面,其中包括窗口、菜单、按钮和其他图形组件。
- 布局是指如何在屏幕上放置组件。使用布局管理器灵活实现布局。(如:这个部件应该在那个部件下面,这个部件在窗口尺寸改变时能自动拉伸等)
- 事件处理是用来响应用户输入的技术。创建了部件并放在屏幕上后,要有办法来处理诸如用户点击按钮等事情。如果用户激活了一个部件,系统就会产生一个事件。
JButton btnstep = new JButton("单步")
frame.add(btnStep,BorderLayout.NORTH)
- Swing 容器+部件
- 采用事件监听器的事件处理(event handling)模型
- 部件可以放在容器里
- 容器可以放在容器里(容器是特殊的部件)
- frame是容器
- 通过add添加部件
- 容器使用布局管理器,frame默认布局管理器是BorderLayout
- 将整个frame分成五块区域(NORTH,SOUTH,EAST,WEST,CENTER)
- 将部件放入容器时,要指定放入区域
- 默认放入CENTER,从一时间一个区域只有一个部件
反转控制
stnStep.addActionListener(new ActionListener(){
@override
public void actionPerformed(ActionEvent e){
System.out.println("按下啦");
}
});
- 内部类,类中成员,可以调用成员函数,访问成员变量。
ActionListener
是一个接口,上面代码定义了一个新的类,该类实现了AcitonListener
接口。
- 注入反转
- 由按钮公布一个守听者接口和一堆注册/注销函数。
add
remove
- 你的代码实现那个接口,将守听者对象注册在按钮上。
- 一旦按钮被按下,就会反过来调用你的守听者对象的某个函数。
7.2 MVC模式
JTable
public class KCBdata implements TableModel{
}
public class KCB{
public static void main(String[] args){
JFrame frame = new JFrame();
frame.pack();
frame.setVisible(true);
JTable table = new JTable();
JScrollPane pane = new JScrollPane(table);
frame.add(pane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
- JTable类(数据和表现分离)
- 可以以表格的形式显示和编辑数据。
- 其对象并不存储数据,知识数据的表现。
MVC
- 数据、表现、控制三者分离。
- model+view+control(TableModel+JTable(合并了view和control))
- 模型model:保存和维护数据,提供接口让外部修改数据,通知表现需要刷新
- 表现view:从模型获得数据,根据数据画出表现
- 控制control:从用户得到输入,根据输入调整数据
- control和view不会直接关联。