GUI的各类元素(如:窗口,按钮,文本框等)由Java类来实现java
使用AWT所涉及的类通常在java.awt包及其子包中编程
AWT(Abstract Window Toolkit)包括了不少类和接口,windows
用于Java Application 的GUI(Graphics User Interface 图形用户界面)编程布局
Container和Component是AWT中的两个核心类post
一、Frame是Windows的子类,由Frame或其子类建立的对象为一个窗体。
二、Frame的经常使用构造方法:
1)Frame()
2)Frame(String s)建立标题栏为字符串s的窗口。this
setBounds(int x,int y,int width,int height) //设置窗体位置和大小,x,y是左上角坐标, //width和height是宽度和高度 setSize(int width,int height) //设置窗体的位置,x,y是左上角坐标 setLocation(int x,int y) //设置窗体的大小,width和height分别是宽度和高度。 setBackground(Color c) //设置背景颜色,参数为Color对象。 setVisible(boolean b) //设置是否可见。 setTitle(String name) String getTitle() setResizable(boolean b) //设置是否能够调整大小。
一、Panel对象能够当作能够容纳Compoent的空间
二、Panel对象能够拥有本身的布局管理器
三、Panel类拥有从其父类继承来的spa
setBounds(int x,int y,int width,int height) setSize(int width,int height) setLocation(int x,int y) setBackground(Color c) setLayout(LayoutManager mgr)等方法。
四、Panel的构造方法为:3d
Panel()使用默认的FlowLayout类布局管理器初始化。
Panel(LayoutManager layout)使用指定的布局管理器初始化。
Java语言中,提供了布局管理器类的对象能够管理code
1)管理Component在Container中的布局,没必要直接设置Component位置和大小。orm
2)每一个Container都有一个布局管理器对象,当容器须要对某个组件进行定位或判断其大小尺寸时,
就会调用其对应的布局管理器,调用Container的setLayout方法改变其布局管理器对象。
Awt提供了5中布局管理器类:
FlowLayout BorderLayout GridLayout CardLayout GridBagLayout
1)BorderLayout是Frame类的默认布局管理器
2)BorderLayout将整个容器的布局划分红
东(EAST)西(WEST)南(SOUTH)北(NORTH)中(CENTER)五个区域,
组件只能被添加到指定的区域。
3)如不指定组件的加入部位,则默认加入到CENTER区。
4)每一个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖
一、Frame是一个顶级窗口,Frame的缺省布局管理器为BorderLayout
二、Panel没法单独显示,必须添加到某个容器中。
三、Panel的缺省布局管理器为FlowLayout。
四、当把Panel做为一个组件添加到某个容器中后,该Panel仍然能够有本身的布局管理器。
五、使用布局管理器时,布局管理器负责各个组件的大小和位置,所以用户没法在这种状况下设置组件大小和位置属性,若是试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。
六、若是用户确实须要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:setLayout(null)
/* 范例名称:Java事件处理举例 * 源文件名称:TestActionEvent.java * 要 点: * 1. Java事件处理机制 * 2. 事件源、事件监听器概念及做用 * 3. 如何在一个现有组件上注册监听器 */ import java.awt.*; import java.awt.event.*; public class TestActionEvent { public static void main(String args[]) { Frame f = new Frame("Test"); Button b = new Button("Press Me!"); Monitor bh = new Monitor(); b.addActionListener(bh); f.add(b,BorderLayout.CENTER); f.pack(); f.setVisible(true); } } class Monitor implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("a button has been pressed"); } }
/* 范例名称:Java事件处理举例 * 源文件名称:TestActionEvent2.java * 要 点: * 1. 一个事件源组件上能够同时注册多个监听器 * 2. 一个监听器对象能够同时注册到多个事件源组件上 * 3. 事件源的信息能够随它所触发的事件自动传递到全部注册过的监听器 */ import java.awt.*; import java.awt.event.*; public class TestActionEvent2 { public static void main(String args[]) { Frame f = new Frame("Test"); Button b1 = new Button("Start"); Button b2 = new Button("Stop"); Monitor2 bh = new Monitor2(); b1.addActionListener(bh); b2.addActionListener(bh); b2.setActionCommand("game over"); f.add(b1,"North"); f.add(b2,"Center"); f.pack(); f.setVisible(true); } } class Monitor2 implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("a button has been pressed," + "the relative info is:\n " + e.getActionCommand()); }
一、java.awt.TextField类用来建立文本框对象。
二、TextField有以下经常使用方法:
TextField() TextField(int columns) TextField(String text) TextField(String text, int columns)
public void setText(String t) public String gerText() publicvoid setEchoChar(char c)设置回显字符 public void setEditable(boolean b) public boolean isEditable() public void setBackground(Color C) public void select(int selectionStart,int selectionEnd) public void selectAll() public void addActionListener(ActionListener l) 添加动做监听器。
/* 范例名称:Java事件处理举例 * 源文件名称:TestActionEvent.java * 要 点: * 1. Java事件处理机制 * 2. 事件源、事件监听器概念及做用 * 3. 如何在一个现有组件上注册监听器 */ import java.awt.*; import java.awt.event.*; public class TestActionEvent { public static void main(String args[]) { Frame f = new Frame("Test"); Button b = new Button("Press Me!"); Monitor bh = new Monitor(); b.addActionListener(bh); f.add(b,BorderLayout.CENTER); f.pack(); f.setVisible(true); } } class Monitor implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("a button has been pressed"); } }
每一个Component都有一个paint(Graphics g)用于实现绘图目的,
每次重画该Component时都自动调用paint方法。
Graphics类中提供了许多绘图方法,Graphics类 Paint方法
import java.awt.*; public class TestPaint { public static void main(String[] args) { new PaintFrame().launchFrame(); } } class PaintFrame extends Frame { public void launchFrame() { setBounds(200,200,640,480); setVisible(true); } public void paint(Graphics g) { Color c = g.getColor(); g.setColor(Color.red); g.fillOval(50, 50, 30, 30); g.setColor(Color.green); g.fillRect(80,80,40,40); g.setColor(c); } }
抽象类java.awt.event.MouseAdapter实现了MouseListener,
可使用其子类做为MouseEvent的监听器,只要重写其相应的方法便可。
对于其余的监听器,也有对应的适配器。
使用适配器能够避免监听器类定义没有必要的空方法。
GUI/MyMouseAdapter.java 鼠标适配器
repaint - update() - paint();
一、Window事件所对应的事件类为WindowsEvent,所对应的事件监听接口为WindowListener。
二、WindowListener定义的方法有:
public void windowsOpened(WindowEvent e) public void windowClosing(WindowsEvent e) public void windowClosed(WindowEvent e) public void windowIconified(WindowEvent e) public void windowDeiconified(WindowEvent e) public void windowActivated(WindowEvent e) public void windowDeactivated(WindowEvent e)
与WindowListener对应的适配器为WindowAdapter。
GUI/TestWindowClose.java
GUI/TestAnonymous2.java
import java.awt.*; import java.awt.event.*; public class TestWindowClose { public static void main(String args[]) { new MyFrame55("MyFrame"); } } class MyFrame55 extends Frame { MyFrame55(String s) { super(s); setLayout(null); setBounds(300, 300, 400, 300); this.setBackground(new Color(204, 204, 255)); setVisible(true); //this.addWindowListener(new MyWindowMonitor()); this.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { setVisible(false); System.exit(-1); } }); } /* class MyWindowMonitor extends WindowAdapter { public void windowClosing(WindowEvent e) { setVisible(false); System.exit(0); } } */ }