Component(组件父类) | ||||||
Containner(容器)可加组件 | Button | Label(封装文字成组件) | ||||
Window(窗口) | Panel(面板) | Checkbox | ||||
Frame Dialog(对话框) | TextConponent | |||||
TextArea | ||||||
一、布局管理器:组件的排放位置
常见布局
FlowLayout(流式布局)
特点:左1,左2
左3 ,左4
BorderLayout(边界式布局)
特点:麻将桌牌式
GridLayout(网格包式布局)
特点:九宫格(计算器)
二、Java包:java.awt
事例:
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; public class AwtDemo { public static void main(String[] args) { Frame f=new Frame("my awt"); f.setVisible(true);//默认为false //嫌窗体小不好? f.setSize(500, 1000);//500为宽,1000为高 //窗体位置不好? f.setLocation(200, 300);//以电脑显示屏为参照,X为据左边宽度,y为据上的宽度 //太单调了?加个组件按钮 Button b=new Button("我是一个按钮"); f.add(b); //按钮占整个窗口?原因是默认的布局管理器是BoderLayout,我们就设置成流式布局吧 f.setLayout(new FlowLayout()); //按按钮不会产生其他功能跳转,那就为它加个监听器 } }
三、事件监听机制
1、事件源:被触发
2、监听器:监听动作并且被注册到事件源
3、事件对象,里面封装了事件源
4、事件对象传递给了监听器作出事件处理
特点:
事件源:awt包的组件,如按钮
事件:每一件事件源都有自己特有的对应事件和共性事件
监听器:将可以触发某一个事件的动作(相当一个报警装置)
代码不需要写,已经封装好了,调用相关对象即可
事例:点按钮进行窗口关闭
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class AwtDemo { public static void main(String[] args) { Frame f=new Frame("my awt"); f.setVisible(true);//默认为false //嫌窗体小不好? f.setSize(500, 1000);//500为宽,1000为高 //窗体位置不好? f.setLocation(200, 300);//以电脑显示屏为参照,X为据左边宽度,y为据上的宽度 //太单调了?加个组件按钮 Button b=new Button("我是一个按钮"); f.add(b); //按钮占整个窗口?原因是默认的布局管理器是BoderLayout,我们就设置成流式布局吧 f.setLayout(new FlowLayout()); //按按钮不会产生其他功能跳转,那就为它加个监听器 //点按钮关闭窗口 //步骤:谁是事件源:frame //谁可以做监听器被注册到事件源? //方法:addWindowListener(WindowListener l), //WindowListener是接口,要重写7个方法才可以完成监听器的功能,怎么办? /**那就另外写一个监听类来实现windowListener 可是需要覆盖7个方法,而我只用到关闭的动作。怎么办? 由于WindowListener的子类WindowAdapter已经实现了WindowListener接口 也覆盖了其中所有的方法,那么我只要继承WindowAdapt覆盖我需要的方法即可 */ //参数不用再填WindowListener的对象了,new一个我下边自定义的类的对象即可 f.addWindowListener(new MyWindowListener()); } }
//自定义的类 class MyWindowListener extends WindowAdapter{ public void windowClosing(WindowEvent e){ //这里的参数e 是我在外边点“关闭”的时候传递进来的 System.out.println("window colsing"); } }
下面是一个比较常规的事例:
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class FrameDemo3 { //-----------------------------事件源部分 //定义需要的组件的引用 private Frame f; private Button but; public FrameDemo3(){ init(); } public static void main(String[] args) { new FrameDemo3(); } public void init(){ f=new Frame("我的框架"); //setBounds(int x,int y,int width,height), //以电脑显示屏为参照,x表据左边,y表据右边,width表框体的宽,height则为高 f.setBounds(300, 100, 500, 500); //我不想按钮太大,所以选用FlowLayout f.setLayout(new FlowLayout()); but=new Button("my button"); //将组件添加到frame中 f.add(but); //显示窗体 f.setVisible(true); //还要加载一下相关的事件 myEvent(); } //--------------------监听器部分--------------------------------------- private void myEvent(){ f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); //需求:让按钮具备退出程序的功能 //这个时候按钮就变成了事件源,那么选择哪个监听器呢? //不是windowListener这个监听器了 //通过关闭窗体事例了解到,想要知道哪个组件具备什么样的特有监听器 //需要查看该组件对象的功能 but.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { System.out.println("退出,我是按钮"); }}); } }