介绍与初体验

AWT(Abstract Window Toolkit)包括了很多类和接口,用于java application的GUI(Graphics User Interface)编程。GUI的各种元素(窗口、按钮、文本框等)由java类实现。一般使用类在java.awt包中,Container和Component是AWT中的两个核心类。

  1. package demo.ba1;
  2. import java.awt.*;
  3. public class TestFrame {
  4. public static void main(String[] args) {
  5. Frame f = new Frame("hello gui");
  6. f.setSize(500,600);//定义窗口大小
  7. f.setBackground(Color.red);//定义背景颜色
  8. f.setResizable(true);//准许调节大小
  9. f.setLocation(1,5);//定义组件位置
  10. f.setVisible(true);//允许jvm开始画图
  11. }
  12. }
  1. package demo.ba1;
  2. import java.awt.*;
  3. import java.awt.event.WindowAdapter;
  4. import java.awt.event.WindowEvent;
  5. public class TestPanel {
  6. public static void main(String[] args) {
  7. Frame f = new Frame("hello panel");
  8. Panel p = new Panel(null);//参数是panel下的容器的布局器
  9. f.setLayout(null);//布局器
  10. f.setBounds(300,300,500,500);//定义位置和大小(x,y,width,height)
  11. f.setBackground(new Color(0,0,102));
  12. p.setBounds(50,50,300,300);
  13. p.setBackground(new Color(55,77,88));
  14. f.add(p);
  15. f.setVisible(true);
  16. //关闭窗口,结束程序
  17. f.addWindowListener(new WindowAdapter() {
  18. //窗体点击关闭时,要做的事
  19. @Override
  20. public void windowClosing(WindowEvent e) {
  21. //结束程序
  22. System.exit(0);
  23. }
  24. });
  25. }
  26. }

三种常用布局器

FlowLayout - 顺序布局器
f.setLayout(new FlowLayout());

BorderLayout - 东南西北中
f.setLayout(new BorderLayout());
f.add(b1,BorderLayout.CENTER);**

  1. //当定义了这种布局时,setSize()会失效
  2. //可以使用以下方式设大小,但不一定会成功:
  3. p1.setPreferredSize(new Dimension((f.getWidth()-p.getWidth())/2,(f.getHeight()-p.getHeight())/2));


GridLayout - 网格布局器
f.setLayout(new GridLayout(行数,列数)

在windows窗口中央显示Frame

  1. int width = Toolkit.getDefaultToolkit().getScreenSize().width;
  2. int height = Toolkit.getDefaultToolkit().getScreenSize().height;
  3. f.setLocation(width/2-f.getWidth()/2,height/2-f.getHeight()/2);

**

事件监听

image.png

button按钮监听

  1. package demo.ba2;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. public class TestActionEvent {
  6. public static void main(String[] args) {
  7. Frame f = new Frame("test");
  8. f.setBounds(300,300,200,200);
  9. Button b = new Button("button");
  10. b.addActionListener(new ActionListener() {
  11. @Override
  12. public void actionPerformed(ActionEvent e) {
  13. System.out.println("a button has been pressed");
  14. }
  15. });
  16. f.add(b,BorderLayout.CENTER);
  17. //f.pack(); // pack()包裹。无视Frame定义的宽高,将容器包裹起来,button有系统默认的宽高
  18. f.setVisible(true);
  19. }
  20. }

文本监听 - text

  1. package demo.ba2;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. public class TFActionEvent {
  6. public static void main(String[] args) {
  7. Frame f = new Frame("123");
  8. f.setSize(300,330);
  9. TextField tf = new TextField();
  10. tf.addActionListener(new ActionListener() {
  11. @Override
  12. public void actionPerformed(ActionEvent e) {
  13. TextField tf = (TextField) e.getSource();
  14. System.out.println(tf.getText());
  15. tf.setText("");
  16. }
  17. });
  18. f.add(tf);
  19. f.setVisible(true);
  20. }
  21. }

关闭窗口 - 点击事件 - 鼠标触发事件

  1. //关闭窗口,结束程序
  2. f.addWindowListener(new WindowAdapter() {
  3. //窗体点击关闭时,要做的事
  4. @Override
  5. public void windowClosing(WindowEvent e) {
  6. //结束程序
  7. System.exit(0);
  8. }
  9. });
  10. f.setVisible(true);