目录
页码:353-398 & 399-428
12 图形用户接口
2018-07-26 09:18:34
看图说故事
事件的监听
监听接口是个介于监听(你)与时间源(按钮)间的桥梁。
事件源(例如按钮)会在用户做出相关动作时(按下按钮)产生事件对象。
取得按钮的ActionEvent
- 实现ActionListener这个接口。
- 向按钮注册(告诉它你要监听事件)。
- 定义事件处理的方法(实现接口上的方法)。
多重监听
### 内部类
一个类可以嵌套在另一个类的的内部。
内部类可以使用外部所有方法与变量,就算是私有的也一样。
内部类把存取外部类的方法和变量单做是开自家冰箱。
内部的类对外部的类有一张特殊的通行证,能够自由地存取它的内容,就算是私用的内容也一样。
内部类可以使用外部的变量:
class MyOuterClass{
private int x;
class MyInnerClass{
void go(){
x=42;
}
}
}
内部类的实例一定会绑定在外部类的实例上*。
内部对象与外部对象有发生过超友谊的关系。
内部类实例
如果你从外部类程序代码中初始化内部的类,此内部类对象会绑在该外部对象上。
class MyOuter{
private int x; //外部有个私用的x实例变量
MyInner inner = new MyInner(); //创建内部实例
public void doStuff(){
inner.go();//调用内部方法
}
class MyInner{
void go(){
x=42;//内部可以使用外部的x变量
}
}
}
13 Swing
组件与容器
组件(component,或称元件)是比我们之前所称的wiget更为正确的术语。他们就是你会放到GUI上面的东西。事实上所有的组件都是继承自 javax.swing.JComponent。
组件是可以嵌套的
在Swing中,几乎所有组件都能够安置其他的组件。
创建GUI四个步骤的回顾:
//(1)创建window(JFrame)
JFrame frame = new JFrame();
//(2)创建组件
JButton button = new JButton("click me");
//(3)把组件加到frame上。
frame.getcontentPane().add(BorderLayot.EAST,button
//(4)显示出来
frame.setSize(300,300);
frame.setVisible(true);
布局管理器(Layout Managers)
布局管理器是个与特定组件相关联的Java对象,它大多数是个背景组件。布局管理器用来控制所关联组件上携带的其他组件。例如,框架带有面板,面板带有按钮,则框架的布局管理器控制面板的大小和位置,面板的控制管理器控制按钮的大小和位置。
携带的意思就是加入到上面
myPanel.add(button);
世界三大首席管理器:border、flow和box
BorderLayout会把背景组件分割成5割区域。
FlowLayout从左到右排列,有必要时会换行。
BoxLayout从上到下每行一个。
BorderLayout南北会先占位,所以东西的高度还要扣除南北的高度。
BoxLayout:
panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
//它的构造函数需要知道要管理那个组件以及使用哪个轴
框架默认时使用BoxLayout布局,面板默认使用FlowLayout布局。
可以调用setLayout来改变面板的布局管理器。