GUI

                 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("退出,我是按钮");
                }});
        
    }
      
      

}

 

  

原文地址:https://www.cnblogs.com/chenqr/p/6425141.html