java无难事笔记(十)

来源:互联网 发布:算法统宗分银子问题 编辑:程序博客网 时间:2024/05/18 14:12

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

BorderLayout

    FlowLayout

    GridLayout

    CardLayout

    GridBagLayout

布局管理器:

 

import java.awt.*;

 

class FrameTest

{

         publicstatic void main(String[]  args)

         {

                   Framef = new Frame("laichunbin");

                   f.setSize(600,400);

                   f.setBackground(Color.DARK_GRAY);

                   f.setLayout(newFlowLayout());

             f.setLayout(new GridLayout(2,3));

                   Buttonbtn1 = new Button("北方");

                   Buttonbtn2 = new Button("南方");

                   Buttonbtn3 = new Button("西方");

                   Buttonbtn4 = new Button("东方");

                   Buttonbtn5 = new Button("中部");

                   f.add(btn1,BorderLayout.NORTH);

                   f.add(btn2,BorderLayout.SOUTH);

                   f.add(btn3,BorderLayout.EAST);

                   f.add(btn4,BorderLayout.WEST);

                   f.add(btn5,BorderLayout.CENTER);

                   f.setVisible(true);

         }

}

 

增加窗口监听事件

实现WindowListener接口,通过Frame.addWindowListener()来添加窗口监听器

import java.awt.*;

import java.awt.event.*;

class FrameTest

{

         publicstatic void main(String[]  args)

         {

                   Framef = new Frame("laichunbin");

                   f.setSize(600,400);

                  f.setBackground(Color.DARK_GRAY);

                   f.setLayout(newGridLayout(2,3));

                   Buttonbtn1 = new Button("北方");

                   Buttonbtn2 = new Button("南方");

                   Buttonbtn3 = new Button("西方");

                   Buttonbtn4 = new Button("东方");

                   Buttonbtn5 = new Button("中部");

                   f.add(btn1,BorderLayout.NORTH);

                   f.add(btn2,BorderLayout.SOUTH);

                   f.add(btn3,BorderLayout.EAST);

                   f.add(btn4,BorderLayout.WEST);

                   f.add(btn5,BorderLayout.CENTER);

                   f.setVisible(true);

                   f.addWindowListener(newMyListener());

         }

}

 

class MyListener implements WindowListener

{

         publicvoid windowOpened(WindowEvent e)

         {

                   System.out.println("窗口首次可见");

         }

 public void windowClosing(WindowEvent e)

  {

       System.exit(0);

  }

 public void windowClosed(WindowEvent e)

  {

       System.out.println("窗口已经关闭");

  }

 public void windowDeiconified(WindowEvent e)

  {

       System.out.println("窗口从最小化状态变为正常状态");

  }

 public void windowIconified(WindowEvent e)

  {

       System.out.println("窗口从正常状态变为最小化状态时调用");

  }

 public  voidwindowActivated(WindowEvent e)

   {

     System.out.println("SystemActivated");

   }

 public void windowDeactivated(WindowEvent e)

   {

      System.out.println("SystemDeactivated");

   }

 

}

 

 

AWT事件模型

先把Frame设置布局管理器为2*2的网格状布局,再在添加四个Panel,每个Panel里面又又采用流式布局和框架布局,网格布局以及卡片布局。

Panel缺省的就是FlowLayout

Frame缺省是BorderLayout,调用add将会添加到中心文本域

代码如下:

import java.awt.*;

import java.awt.event.*;

 

class MyFrame extends  Frame

{

         PanelflowPannel;

         PanelborderPannel;

         PanelgridPannel;

         PanelcardPannel;

         MyFrame(Stringtitle)

         {

                   super(title);

                   setSize(600,400);

                   setBackground(newColor(255,0,255));

                   setLayout(newGridLayout(2,2));

 

           setBorderPanel();//每一个平面设置布局,然后加上按钮

           setFlowPanel();

           setGridPannel();

           setCardPannel();

 

                   add(flowPannel);//把四个平面加到Frame里面

                   add(borderPannel);

                   add(gridPannel);

                   add(cardPannel);

 

                  

         }

         privatevoid setBorderPanel()

         {

                   borderPannel= new Panel();

                   borderPannel.setLayout(newBorderLayout());

                   Buttonbtn1 = new Button("北方");

                   Buttonbtn2 = new Button("南方");

                   Buttonbtn3 = new Button("西方");

                   Buttonbtn4 = new Button("东方");

                   Buttonbtn5 = new Button("中部");

                   borderPannel.add(btn1,BorderLayout.NORTH);

                   borderPannel.add(btn2,BorderLayout.SOUTH);

                   borderPannel.add(btn3,BorderLayout.EAST);

                   borderPannel.add(btn4,BorderLayout.WEST);

                   borderPannel.add(btn5,BorderLayout.CENTER);

         }

         privatevoid setFlowPanel()

         {

                   flowPannel= new Panel();

                   flowPannel.setLayout(newFlowLayout());

                   Buttonbtn1 = new Button("神马");

                   Buttonbtn2 = new Button("浮云");

                   Buttonbtn3 = new Button("屌丝");

                   Buttonbtn4 = new Button("失足");

                   flowPannel.add(btn1);

                   flowPannel.add(btn2);

                   flowPannel.add(btn3);

                   flowPannel.add(btn4);

         }

         privatevoid setGridPannel()

         {

                   gridPannel= new Panel();

                   gridPannel.setLayout(newGridLayout(2,2));

                   Buttonbtn1 = new Button("牛逼");

                   Buttonbtn2 = new Button("文艺");

                   Buttonbtn3 = new Button("二逼");

                   Buttonbtn4 = new Button("苦逼");

                   gridPannel.add(btn1);

                   gridPannel.add(btn2);

                   gridPannel.add(btn3);

                   gridPannel.add(btn4);

         }

         privatevoid setCardPannel()

         {

                   cardPannel= new Panel();

                   cardPannel.setLayout(newCardLayout());

                   Buttonbtn1 = new Button("红心A");

                   Buttonbtn2 = new Button("梅花J");

                   cardPannel.add(btn1);

                   cardPannel.add(btn2);

         }

         publicstatic void main(String[] args)

         {

                   MyFramemf = new MyFrame("布局管理器");

                   mf.setVisible(true);

         }

}

 

 

按钮事件响应:

按钮事件必须产生实现ActionListener接口中的void actionPerformed(ActionEvent e)方法

获取事件源,可以调用getSource()来获取

Button btn5 = new Button("中部");

                   btn5.addActionListener(newActionListener()

                   {

                            publicvoid actionPerformed(ActionEvent e)

                            {

                                     ((Button)e.getSource()).setLabel("日出东方");

                            }

                   }

                   );


CardLayout实现翻牌效果:

private void setCardPannel()

{

                   cardPannel= new Panel();

                   finalCardLayout cl = new CardLayout();

                   cardPannel.setLayout(cl);

                   Buttonbtn1 = new Button("红心A");

                   Buttonbtn2 = new Button("梅花J");

                   ActionListeneral = new ActionListener()

                   {

                            publicvoid actionPerformed(ActionEvent e)

                            {

                                     cl.next(cardPannel);

                            }

                   };

                   btn1.addActionListener(al);

                   btn2.addActionListener(al);

                   cardPannel.add(btn1);

                   cardPannel.add(btn2);

}

翻牌效果主要是利用next函数,把牌堆里的下一张卡片放到指定的容器里面

这个动作的发生放在监听事件发现单击事件的时候

如果内部类要引用局部变量,那么需要将这个局部变量声明为final

ActionListenr al = new ActionListener()

这本来是一个接口无法实例化,但是可以在后面加上这个接口的实现

ActionListener al = new ActionListener()

                   {

                            publicvoid actionPerformed(ActionEvent e)

                            {

                                     cl.next(cardPannel);

                            }

                   };

就变成了一个匿名类,赋值给一个接口变量

 

 

 

创建菜单栏

 

菜单栏 MenuBar

菜单  Menu

菜单项 MenuItem

分别对应三个类

 

                   Framef = new Frame("菜单管理");

                   f.setSize(600,400);

                   MenuBarmb = new MenuBar();//创建一个菜单栏

                   Menum1 = new Menu("File");//创建两个菜单,并指定菜单的名称

                   Menum2 = new Menu("Edit");

                   MenuItemmi1 = new MenuItem("Open");//创建7个菜单项

                   MenuItemmi2 = new MenuItem("New");

                   MenuItemmi3 = new MenuItem("Find");

                   MenuItemmi4 = new MenuItem("Exit");

                   MenuItemmi5 = new MenuItem("COPY");

                   MenuItemmi6 = new MenuItem("Paste");

                   MenuItemmi7 = new MenuItem("Open");

                  

                   m1.add(mi1);//添加菜单项

                   m1.add(mi2);

                   m1.add(mi3);

                   m1.add(mi4);

                  

                   m2.add(mi5);

                   m2.add(mi6);

                   m2.add(mi7);

                  

                   mb.add(m1);

                   mb.add(m2);

                  

                   f.setMenuBar(mb);//设置菜单栏

                   f.setVisible(true);

 

 

为菜单添加事件响应

 

首先让一个容器addActionListener事件,自己创建一个ActionListener事件,TextArea有一个Append方法,往里面添加数据,传入参数为字符串;

TextFiled文本域,只能输入一行字符串;

final Frame f = new Frame("菜单管理");

                   f.setSize(600,400);

                   finalTextArea ta = new TextArea("请输入文本");//add TextArea to Frame,otherwise it willnot displat TextArea;

                   f.add(ta);//声明了一个文本域,记得添加到框架上,否则还是显示不了

                   MenuBarmb = new MenuBar();

                   Menum1 = new Menu("File");

                   Menum2 = new Menu("Edit");

                   MenuItemmi1 = new MenuItem("Open");

                   mi1.addActionListener(new ActionListener()//为菜单项1添加事件响应

                   {

                            publicvoid actionPerformed(ActionEvent e)

                            {

                                     try

                                     {

                                       FileDialog fd = new FileDialog(f,"打开文件",FileDialog.LOAD);//打开对话框

                                       //fd.setVisible(true);

                                       String strFile =fd.getDirectory()+fd.getFile();

                                       FileInputStream fis = newFileInputStream(strFile);

                                       byte[] b = new byte[10*1024];

                                       int len = fis.read(b,0,10*1024);//这里仅仅以字节为单位

                                       ta.append(new String(b,0,len));

                                       fis.close();

                                     }

                                     catch(Exceptionex)

                                     {

                                               ex.printStackTrace();

                                     }

                                     ta.setVisible(true);

                            }

 

                   }

                   );

                   MenuItemmi2 = new MenuItem("New");

                   MenuItemmi3 = new MenuItem("Find");

                   MenuItemmi4 = new MenuItem("Exit");

                   MenuItemmi5 = new MenuItem("COPY");

                   MenuItemmi6 = new MenuItem("Paste");

                   MenuItemmi7 = new MenuItem("Open");

                  

                   m1.add(mi1);

                   m1.add(mi2);

                   m1.add(mi3);

                   m1.add(mi4);

                  

                   m2.add(mi5);

                   m2.add(mi6);

                   m2.add(mi7);

                  

                   mb.add(m1);

                   mb.add(m2);

                  

                   f.setMenuBar(mb);

                   f.setVisible(true);