12.25!~12.27
GUI
1 容器,部件
2 事件处理
awt和swing的特点:
awt(抽象窗口工具集)是依赖操作系统的GUI.
能够显示出来的组件是不同操作系统的共有组件.(但是不太好看.)
swing(模拟GUI组件)速度比awt要慢的多.
swt(sun公司的,是swing和awt的综合体)如果swt产生的组件awt有就直接调用, 没有就模拟出来.这样既解决了跨平台的问题,也解决了速度慢的问题.
低层容器:容器是包含其他组件的组件.
JFrame,JApplet,JDialog.
布局管理器:
标准布局,自由布局.
GUI三个步骤:
1.选择容器
2.为容器设置布局方式
3.为容器填加组件
导入3个包
import javax.swing.*;
import java.awt.*;
import awt.event.*;
GUI底层容器的实现方式
第一种:
JFrame jf = new JFrame(); //拿一个容器
jf.setLayout(null);
JButton jb = new JButton();
jb.setBounds(0,0,20,20); //绝对布局
jf.add(jb);
this.setSize(200,200);
this.setVisible(true);
第二种:
类 extends JFrame //让自己的类变成容器
申明组件;
public 类
{
Container ct = this.getContentPane();
ct.add();
this.setSize();
this.setVisible();
}
this.setCursor(new Cursor(Cursor.HAND_CURSOR)); //变手
Image image = new ImageIcon("Sunset.jpg").getImage();
setIconImage(image);//改变图标
容器,根容器,部件看gui资料 E盘..
布局管理器
FlowLayout 面板(缺省管理器) 流布局管理器
在setLayout(null)下全是FlowLayout
BorderLayout JFrame(缺省布局管理器) 东 西 南 北 中
GridLayout 行列(像表格)
CardLayout 卡片布局管理器(没有页签)
GridBagLayout 格兰包布局管理器(标准管理器中最灵活的,不好把控)
FlowLayout 从上到下,从左到右放置.
1.当第一行没有排满时,会把第一行排满再排下一行.
2.不管布局管理器是否改变,组件大小都不会改变.
FlowLayout folw = new FlowLayout (FlowLayout.LEFT);
3.在缺省状态下从中部开始.
BorderLayout
当东西南北任何一个地区没放置任何组件时,中部区域会把周围的区域侵略掉.
setLayout(new BorderLayout());
组件会随着容器大小的变化而变化.
add("North",组件); 不好用
add(组件,BorderLayout.NORTH); 清晰
GridLayout
组件会随着容器大小的变化而变化.
setLayout(new GridLayout(3,2)); 行列
add(new Button("first",0));
根据序列依次填进去,只有列满了才去填行.
validate(); 让容器刷新
GardLayout
GardLayout card = new GardLayout();
setLayout(card);
add("1",new Button(""));
CardLayout cl = (CardLayout)cardLayout.getLayout;
cl.show(cardLayout,"card1");
事件
class 类 extends JFrame implements(实现) ActionListener(接口)
{ (受托事件处理)
不同的事件不同的部门处理
}
1 让类变成监听者
2 赋予多少职责就实现多少
3 建立部件与监听者的关系
jb.addActionListener(this);
CardLayout cl = (CardLayout)card.getLayout();
String s = e.getActionCommed();
if(s.equals("上一步"))
{
cl.show(card,"card2");
或者
cl.previous(card);
button.setEnabled(false);
}
else if(s.equals("下一步"))
{
cl.show(card,"card1");
或者
cl.previous(card);
button.setEnabled(false);
}