Java学习之图形界面编程AWT

 

AWT(Abstract Window Toolkit) ,抽象窗口工具包, SUN 公司提供的用于图形界面编程 (GUI) 的类库。基本的 AWT 库处理用户界面元素的方法是把这些元素的创建和行为委托给每个目标平台上( Windows Unix Macintosh —苹果操作系统等)的本地 GUI 工具进行处理。

 

容器里组件的位置和大小是由布局管理器来决定的。容器对布局管理器的特定实例保持一个引用。当容器需要定位一个组件时,它将调用布局管理器来完成。当决定一个组件的大小时,也是如此。

AWT 中,给我们提供了五种布局管理器:

BorderLayout  FlowLayout  GridLayout  CardLayout  GridBagLayout

 

AWT 事件模型

Events( 事件 ) :描述发生了什么的对象。

Event source( 事件源 ) :事件的产生器。

Event handlers( 事件处理器 ) :接收事件对象、解释事件对象并处理用户交互的方法。

事件监听器:实现了监听器接口的类。一个监听器对象是一个实现了专门的监听器接口的类的实例。

 

 

 

----------------------------------------------------------Frame-----------------------------------------------------

import java.awt.*;

import java.awt.event.*;

import java.io.*;

public class FrameTest {

 

       public static void main(String args[]) throws IOException{

              final Frame f=new Frame();

              /* 在构造 FileDialog 文件对话框的对象时,参数部分调用了 Frame 窗体的对象 f

                在方法当中,所定义的匿名内部类要访问外部的局部变量或者本地变量,需要将变量声明为 final

                */

              System.out.println("======================== 设置窗体属性 ========================");

              f.setSize(500, 400);

              f.setLocation(420, 250);

              f.setBackground(Color.GRAY);

             

              f.setLayout(new BorderLayout(10,10));// 按照东南西北中 5 个方位排列,也是默认缺省的布局管理器

              //f.setLayout(new FlowLayout(FlowLayout.CENTER));// 流式布局管理器

              //f.setLayout(new GridLayout(3,3,10,10));// 网格状布局管理器

              //f.setLayout(new CardLayout(10,10));// 卡片布局管理器

              //f.setLayout(new GridBagLayout());//

             

              System.out.println("======================== 给窗体添加按钮 ========================");

              Button b1=new Button("North");

              Button b2=new Button("South");

              Button b3=new Button("West");

              Button b4=new Button("East");

              Button b5=new Button("Center");

              f.add(b1,"North");

              f.add(b2,"South");

              f.add(b3,"West");

              f.add(b4,"East");

              f.add(b5,"Center");

             

              f.addWindowListener(new WindowAdapter() {// 方法 1 WindowListener 事件,实现 Frame 窗体关闭操作

               public void windowClosing(WindowEvent e) {

                 System.exit(0);  //System 类的 exit 方法 终止当前正在运行的 Java 虚拟机

               }

             });

             

              //f.addWindowListener(new WindowListenerMethod2()); // 调用方法 2 addWindowListener 方法

              //f.addWindowListener(new WindowListenerMethod3()); // 调用方法 3 addWindowListener 方法

              /*WindowListener 用于接收窗口事件的侦听器接口 , 需要处理窗口事件的类可以有 2 种方法

                1. 实现 WindowListener 此接口

                2. 扩展抽象类 WindowAdapter ,仅需要重写所需的方法

                然后使用窗口的 addWindowListener 方法将从该类所创建的侦听器对象向该 Frame 注册

                当通过打开、关闭、激活或停用、图

                标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,

                并将 WindowEvent 传递给该方法   */

             

              System.out.println("======================== 给窗体添加菜单 ========================");

              MenuBar mb=new MenuBar();// 菜单栏

             

              Menu m1=new Menu(" 文件 ");// 菜单

              Menu m2=new Menu(" 编辑 ");

             

              MenuItem mi1=new MenuItem(" 新建 ");// 菜单项

              MenuItem mi2=new MenuItem(" 打开 ");

              MenuItem mi3=new MenuItem(" 保存 ");

              MenuItem mi4=new MenuItem(" 退出 ");

              MenuItem mi5=new MenuItem(" 复制 ");

              MenuItem mi6=new MenuItem(" 粘贴 ");

             

              m1.add(mi1);

              m1.add(mi2);

              m1.add(mi3);

              m1.add(mi4);

              m2.add(mi5);

              m2.add(mi6);

             

              mb.add(m1);

              mb.add(m2);

              f.setMenuBar(mb);// 把菜单栏添加到 Frame 窗体中

             

              System.out.println("====================== 添加只有一行的文本区 ======================");

              TextField tf=new TextField(10);

              f.add(tf,"North");

             

              System.out.println("======================== 添加文本域 ========================");

              final TextArea ta=new TextArea();

              f.add(ta);

             

              System.out.println("================= 以下为操作事件的侦听器接口 =================");

              mi1.addActionListener(new ActionListener(){  // 新建

                     public void actionPerformed(ActionEvent e){

                            ta.setText(" ");

                     }

              });

             

             

              mi4.addActionListener(new ActionListener(){  // " 退出 " 菜单项添加退出事件

                     public void actionPerformed(ActionEvent e){

                            System.exit(0);

                     }

              });

             

              f.setVisible(true);

       }

}

class WindowListenerMethod2 implements WindowListener {  // 方法 2

 

       public void windowActivated(WindowEvent e) {

             

       }

       public void windowClosed(WindowEvent e) {

             

       }

       public void windowClosing(WindowEvent e) {

              System.exit(0);

       }

       public void windowDeactivated(WindowEvent e) {

             

       }

       public void windowDeiconified(WindowEvent e) {

             

       }

       public void windowIconified(WindowEvent e) {

             

       }

       public void windowOpened(WindowEvent e) {

             

       }

      

}

class WindowListenerMethod3 extends WindowAdapter  // 方法 3

{

  public void windowClosing(WindowEvent e)

  {

    System.exit(0);

  }

}

 

 

 

 

 

 

 

 

 

 

 

--------------------------------------------------------Panel--------------------------------------------------------

import java.awt.*;

import java.awt.event.*;

 

public class PanelTest extends Frame

{

       /*Panel 是最简单的容器类 , 也可以成为面板

         应用程序可以将其他组件放在 Panel 提供的空间内,这些组件包括其他 Panel

         Panel 的默认布局管理器是 FlowLayout 布局管理器  

         将多个 panel 放置在一个 Frame 中,每个 panel 可以使用一种布局,将每种布局的 panel 用一个方法来控制

         *Frame Panel 都属于 java.awt

         *WindowListener ActionListener 属于 java.awt.event 事件类

         *

         * */

  private Panel borderPanel;

  private Panel flowPanel;

  private Panel gridPanel;

  private Panel cardPanel;

  public PanelTest(String title)

  {

       super(title);  // 虽然 PanelTest 类已经继承 Frame 类,但设置标题还需要使用 super 调用父类的构造器设置标题

    setSize(600,400); // 定义 Frame 窗体的大小

    setLocation(100,100);  // 定义 Frame 窗体从屏幕左上角起向右延伸的 xy 轴的位置

    setBorderLayoutPanel();  // 初始化 4 Panel

    setFlowLayoutPanel();

    setGridLayoutPanel();

    setCardLayoutPanel();

    setLayout(new GridLayout(2,2));  // 定义整个 Frame 窗体使用网格状布局管理方式

    add(borderPanel);  // 添加所有的 Panel

    add(flowPanel);

    add(gridPanel);

    add(cardPanel);

    addWindowListener(new WindowAdapter() {  //WindowListener 事件,实现 Frame 窗体关闭操作

      public void windowClosing(WindowEvent e) {

        System.exit(0);  //System 类的 exit 方法 终止当前正在运行的 Java 虚拟机

      }

    });

  }

 

  public void setBorderLayoutPanel()

  {

    borderPanel=new Panel();

    borderPanel.setLayout(new BorderLayout());

    Button btn1=new Button("North");

    Button btn2=new Button("South");

     Button btn3=new Button("West");

    Button btn4=new Button("East");

    Button btn5=new Button("Center");

    borderPanel.add(btn1,BorderLayout.NORTH);

    borderPanel.add(btn2,BorderLayout.SOUTH);

    borderPanel.add(btn3,BorderLayout.WEST);

    borderPanel.add(btn4,BorderLayout.EAST);

    borderPanel.add(btn5,BorderLayout.CENTER);

  }

  public void setFlowLayoutPanel()

  {

    flowPanel=new Panel();

    Button btn1=new Button("mybole");

    btn1.addActionListener(new ActionListener() {  // 使用匿名内部类来实现 ActionListener 接口

          

           /*ActionListener 用于接收操作事件的侦听器接口,对处理操作事件的类可以实现此接口

              而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册

              在发生操作事件时,调用该对象的 actionPerformed 方法。

             *

             * */

           public void actionPerformed(ActionEvent e) {

                    Button b=(Button)e.getSource();

                   if(b.getLabel()=="mybole"){

                          b.setLabel("weixin");

                   }

                   else {

                            b.setLabel("mybole");

                   }

             }

     });

    Button btn2=new Button("winsun");

    flowPanel.add(btn1);

    flowPanel.add(btn2);

  }

  public void setGridLayoutPanel()

  {

    gridPanel=new Panel();

    gridPanel.setLayout(new GridLayout(2,2));

    Button btn1=new Button("Button1");

    Button btn2=new Button("Button2");

    Button btn3=new Button("Button3");

    Button btn4=new Button("Button4");

    gridPanel.add(btn1);

    gridPanel.add(btn2);

    gridPanel.add(btn3);

    gridPanel.add(btn4);

  }

  public void setCardLayoutPanel()

  {

    final CardLayout cl=new CardLayout();

    cardPanel=new Panel();

    cardPanel.setLayout(cl);

    Button btn1=new Button(" 黑桃 A");

    Button btn2=new Button(" 红桃 K");

    ActionListener al=new ActionListener()

        {

          public void actionPerformed(ActionEvent e)

          {

            cl.next(cardPanel);  //CardLayout 布局的 next() 方法 翻转到指定容器的下一张卡片

          }

        };

        // 通过此事件 将完成在 CardLayout 布局的 Panel   按钮之间切换 ( 翻转 ) 的功能

    btn1.addActionListener(al);

    btn2.addActionListener(al);

 

    cardPanel.add(btn1,"1");

    cardPanel.add(btn2,"2");

  }

  public static void main(String[] args) throws HeadlessException

  {

    PanelTest pt = new PanelTest("http://www.mybole.com.cn");

    pt.setVisible(true);

  }

 

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值