Java学习之图形界面编程AWT

时间:2023-01-26 16:58:48

 

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

 

       publicstatic void main(String args[]) throws IOException{

              finalFrame f=new Frame();

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

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

                */

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

              f.setSize(500,400);

              f.setLocation(420,250);

              f.setBackground(Color.GRAY);

             

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

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

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

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

              //f.setLayout(newGridBagLayout());//

             

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

              Buttonb1=new Button("North");

              Buttonb2=new Button("South");

              Buttonb3=new Button("West");

              Buttonb4=new Button("East");

              Buttonb5=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(newWindowAdapter() {//方法1 WindowListener事件,实现Frame窗体关闭操作

               public void windowClosing(WindowEvente) {

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

               }

             });

             

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

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

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

                1.实现WindowListener此接口

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

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

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

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

                并将 WindowEvent 传递给该方法  */

             

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

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

             

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

              Menum2=new Menu("编辑");

             

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

              MenuItemmi2=new MenuItem("打开");

              MenuItemmi3=new MenuItem("保存");

              MenuItemmi4=new MenuItem("退出");

              MenuItemmi5=new MenuItem("复制");

              MenuItemmi6=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("======================添加只有一行的文本区======================");

              TextFieldtf=new TextField(10);

              f.add(tf,"North");

             

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

              finalTextArea ta=new TextArea();

              f.add(ta);

             

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

              mi1.addActionListener(newActionListener(){  //新建

                     publicvoid actionPerformed(ActionEvent e){

                            ta.setText("");

                     }

              });

             

             

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

                     publicvoid actionPerformed(ActionEvent e){

                            System.exit(0);

                     }

              });

             

              f.setVisible(true);

       }

}

class WindowListenerMethod2 implementsWindowListener {  //方法2

 

       publicvoid windowActivated(WindowEvent e) {

             

       }

       publicvoid windowClosed(WindowEvent e) {

             

       }

       publicvoid windowClosing(WindowEvent e) {

              System.exit(0);

       }

       publicvoid windowDeactivated(WindowEvent e) {

             

       }

       publicvoid windowDeiconified(WindowEvent e) {

             

       }

       publicvoid windowIconified(WindowEvent e) {

             

       }

       publicvoid windowOpened(WindowEvent e) {

             

       }

      

}

class WindowListenerMethod3 extendsWindowAdapter  //方法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用一个方法来控制

        *FramePanel都属于java.awt

        *WindowListenerActionListener属于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();  //初始化4Panel

   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) {

                 Buttonb=(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);

  }

 

}