awt包:
GUI元素由java类来实现
核心类:
Component(抽象类):代表图形元素
Container: 容纳其他图形元素的容器
一般Component对象需要放在Container中才可以显示
布局管理器:
通过setLayout方法设置不同的布局管理器:
布局管理器可以互相嵌套
事件监听:
针对不同事件需要实现不同接口
import java.awt.*;
import java.awt.event.*;
public class TestEvent {
public static void main(String[] args) {
Frame f = new Frame("GUI");
Button b = new Button("Button");
Monitor m = new Monitor();
b.addActionListener(m);\
//对按钮元素进行监听
f.add(b);
f.pack();
f.setVisible(true);
}
}
class Monitor implements ActionListener {
//监听器实现接口
public void actionPerformed(ActionEvent e) {
//将事件信息封装为对象,传入接口方法
System.out.println("Hello");
}
}
TextField类:文本输入框
import java.awt.*;
import java.awt.event.*;
public class TestText {
public static void main(String[] args) {
new MyFrame();
}
}
class MyFrame extends Frame {
MyFrame() {
TextField tf = new TextField();
add(tf);
tf.addActionListener(new TFActionListener());
//tf.setEchoChar('*');
//设置回显字符
pack();
setVisible(true);
}
}
class TFActionListener implements ActionListener {
public void actionPerformed (ActionEvent e) {
TextField tf = (TextField) e.getSource();
//读取事件信息,返回事件源对象,默认为Object,需要强制转换类型
System.out.println(tf.getText());
//读取事件源对象内容
tf.setText("");
//清空文本框
}
}
持有对象引用:
import java.awt.*;
import java.awt.event.*;
public class TestPlus {
public static void main(String[] args){
new PlusFrame().launchFrame();
}
}
class PlusFrame extends Frame {
TextField num1, num2, num3;
public void launchFrame() {
//运行frame
num1 = new TextField(10);
num2 = new TextField(10);
num3 = new TextField(15);
Label plus = new Label("+");
Button equal = new Button("=");
setLayout(new FlowLayout());
equal.addActionListener(new Monitor(this));
add(num1);
add(plus);
add(num2);
add(equal);
add(num3);
pack();
setVisible(true);
}
}
class Monitor implements ActionListener {
//方法1
/*TextField n1, n2, n3;
public Monitor(TextField n1, TextField n2, TextField n3) {
this.n1 = n1;
this.n2 = n2;
this.n3 = n3;
}
*/
//方法2,更好
PlusFrame pf = null;
//持有对象引用,不需要引用对象内部的所有小对象
public Monitor(PlusFrame pf) {
this.pf = pf;
}
public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(pf.num1.getText());
int n2 = Integer.parseInt(pf.num2.getText());
pf.num3.setText("" + (n1 + n2));
}
}
内部类:
好处:可以方便的访问包装类的变量和方法,避免内部类被其他无关类访问
import java.awt.*;
import java.awt.event.*;
public class TestInnerClass {
public static void main(String[] args){
new PlusFrame().launchFrame();
}
}
class PlusFrame extends Frame {
TextField num1, num2, num3;
public void launchFrame() {
num1 = new TextField(10);
num2 = new TextField(10);
num3 = new TextField(15);
Label plus = new Label("+");
Button equal = new Button("=");
setLayout(new FlowLayout());
equal.addActionListener(new Monitor());
add(num1);
add(plus);
add(num2);
add(equal);
add(num3);
pack();
setVisible(true);
}
//方法3
class Monitor implements ActionListener {
//内部类
//可以访问外部的包装类
public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
num3.setText("" + (n1 + n2));
}
}
}
Graphics类:
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, 400, 400);
setVisible(true);
}
public void paint(Graphics g) {
//每次frame需要被重画时,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);
}
}
鼠标适配器:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class TestMouse {
public static void main(String[] args) {
new MyFrame("TIRED");
}
}
class MyFrame extends Frame {
ArrayList<Point> point = null;
MyFrame(String s) {
super(s);
point = new ArrayList<Point>();
setLayout(null);
setBounds(300, 300, 400, 400);
this.setBackground(Color.white);
setVisible(true);
this.addMouseListener(new Monitor());
//鼠标进行监听
}
public void paint(Graphics g) {
Iterator<Point> i = point.iterator();
while(i.hasNext()) {
Point p = (Point) i.next();
g.setColor(Color.black);
g.fillOval(p.x, p.y, 5, 5);
}
}
public void addPoint(Point p) {
point.add(p);
}
}
class Monitor extends MouseAdapter {
//不实现MouseListener是为了避免实现所有方法
public void mousePressed(MouseEvent e) {
MyFrame f = (MyFrame) e.getSource();
//拿到事件源对象
f.addPoint(new Point(e.getX(), e.getY()));
f.repaint();
//对当前frame进行重画,保证每次点击后都立即重画
//内部先调用update,再调用paint
}
}
Window事件:
import java.awt.*;
import java.awt.event.*;
public class TestClose {
public static void main(String[] args) {
new CloseFrame("Close");
}
}
class CloseFrame extends Frame {
CloseFrame(String s) {
super(s);
setLayout(null);
setBounds(300, 300, 400, 400);
setVisible(true);
//this.addWindowListener(new Monitor());
//匿名类,new父类对象(实现了方法)
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
setVisible(false);
System.exit(0);
}
});
}
//内部类
/*
class Monitor extends WindowAdapter {
public void windowClosing(WindowEvent e) {
setVisible(false);
System.exit(0);
}
}
*/
}
Key事件:
import java.awt.*;
import java.awt.event.*;
public class TestKey {
public static void main(String[] args) {
new KeyFrame().launchFrame();
}
}
class KeyFrame extends Frame {
public void launchFrame() {
setSize(200, 200);
setLocation(300, 300);
setVisible(true);
this.addKeyListener(new Monitor());
}
class Monitor extends KeyAdapter {
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_UP) {
System.out.println("UP");
}
if(keyCode == KeyEvent.VK_DOWN) {
System.out.println("DOWN");
}
if(keyCode == KeyEvent.VK_LEFT) {
System.out.println("LEFT");
}
if(keyCode == KeyEvent.VK_RIGHT) {
System.out.println("RIGHT");
}
}
}
}