黑马程序员——GUI

                                          ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

      我们在前面的程序里使用的都是命令行的模式,为了便于客户的使用,提供了可视化图形用户界面。我们在编写这些可视化的窗口时候,使用的是AWT,AWT是从个个平台窗口系统里抽取的共性组件。但是,AWT提供的功能有限,窗口丑陋,后来者开发GUI库,简称IFC,总体上来看的话,Swing是AWT的改进。

    下图介绍了AWT里包含的两个子类及其继承关系,Component代表了一个能以图形化式显示出来,并可以与用户可以很好交互的对象。MenuComponent则代表图形界面的菜单组件, 包括MenuBar,MenuItem等子类。AWT图形用户界面编程有:Container和LayoutManager,Container代表了一种容器,可以盛装普通的component,LayoutManager则是容器管理其他组件布局的方式。

   


     布局管理器:容器中的组件排放方式,包括:FlowLayout流式布局器,从左到右的顺序排列,Panel默认的布局管理器。BorderLayout:东西南北,Frame默认的布局管理器。GridLayout:卡片布局管理器,选项卡。GridBagLayout:非规矩的矩阵。


   我们需要知道AWT中各容器之间的关系如下图所示。


    component里常用的方法来设置组件大小位置,setLocation(x,y),setSize(w,h),setBounds(x,y,w,h) 同时设置大小,位置。setVisible(boolean b)设置组件可见性。

      Frame作为Windows的子类具有标题,可拖动改变位置大小,初始化不可见,需要设置可见。默认的管理器是BorderLayout。

Frame f=new Frame(“名称”);
f.setBounds()
f.setLayout();
Button b=new Button(" ");
f.add(b);
f.setVisible;

 

      上面的一些步骤说明创建图形化界面的过程:1.创建Frame窗体,2.对窗体进行基本大小位置的设置.3.定义组件,4.将组件通过窗体add方法来添加到窗体中,5.让窗体显示。

    事件监听机制如下图所示,事件监听机制的特点:事件源是指AWT包盒子Swing包中的那些图形化界面组件,事件是指每一个事件源都有自己特有的对应事件和共性事件。监听器将可以触发某一个事件的动作都已经封装到了监听器中。我们需要对事件产生的动作进行处理。

  实现事件监听器类,必须实现一个—listener接口,创建普通组件,创建事件监听对象。调用add—listener方法将事件监听器对象注册给普通组件。

 public class Eventqs
 {
    private Frame f=new Frame("");
    private Button b=new Button("ok");
    private TextField tf=new TextField(30);
    public void init
      {
    	b.addActionListener(new bListener());            // 注册事件监听器
   public void KeyPressed(keyEvent e)
   {
       
    }
}
)

     f.add(tf); f.add(b,BorderLayout.SOUTH); f.Pack(); f.setVisible(true); } class bListener implements ActionListener { public void actionPerformed(ActionEvent e) //定义的方法就是事件的处理器,用于响应特定事件 { tf.setText(" "); } } }

 
      
如何确定我们需要—Listener呢,可以根据我们需要操作的对象来。比如,操作的是窗口那么可能是Windows,按钮可能就是actionListener等等。 

      鼠标事件与键盘事件属于低级事件。按钮加事件最好使用Actionlistener,如果加click,则click先执行。我们给but添加一个键盘监听 ,鼠标的事件监听器也是同样的。

b.addKeyListener(new KeyAdapter()
{
   public void KeyPressed(KeyEvent e)
   {
    
   }
})

  Dialog是Window类的子类,属于特殊组件,对话框可以独立存在的顶级窗口, 因此用法和普通的窗口用法几乎一样,注意的两点是对话框依赖于其他窗口,对话框有非模式和模式两种,模式为真的,不处理这个窗口其他窗口也没有办法处理。

 <pre name="code" class="java">       f=new Frame("  ");
	 f.setBounds(100,110,120,130);
	 f.setLayout(new FlowLayout());
	 tf=new TextField(60);
	 but=new Button("  ");
	 ta=new TextArea(25,70);
	 d=new Dialog(f,"  ",true);
         d.setBouds(200,200,200,200);
	 lab=new Label();
	 ok=new Button("  ");
	 d.add(lab);
	 d.add(but);
	 f.add(tf);
	 f.add(but);
	 f.add(ta);

 
      
菜单栏,菜单条,菜单项。 MenuBar可盛装 Menu,Menu可盛装MenuItem,我们在创建了MenuItem,Menu,MenuBar对象之后,调用add方法将多个组件组成菜单,在调用MenuBar的add方法将多个Menu组合成菜单条,最后调用Frame对象的setMenuBar方法为该窗口添加菜单条。 

 mb=new MenuBar();
 m=new Menu(" ");
 subMenu=new Menu("  ");
 closeItem=new MenuItem(" ");
 subMenu.add(subItem);
 m.add(subMenu);
 m.add(closeItem);
 mb.add(m);
    FileDialog作为Dialog的子类,代表了一个文件对话框,用于打开和保存文件。FileDialog提供两个功能来获取文件路径,getDirectory获取绝对路径,getFile获取被打开或保存的文件名。  下面的对话框本身就是Windows提供的文件对话框,所以当单击其中的图标,按钮等元素的时候,该对话框都能提供相应的动作。

FileDialog d1=new FileDialog(f,"  ",FileDialog.LOAD);
  FileDialog d2=new FileDialog(f,"  ",FileDialog.SAVE);
 Button b1=new Button(" open file ");
 Button b2=new Button(" save file ");
 public void init()
 {
	 b1.addActionListener(new ActionListener()
	 {
		 public void actionPerformed(ActionEvent e)
		 {
			 d1.setVisible(true);
			 System.out.println(d1.getDirectory()+d1.getFile());
		 }
	 });
	 b2.addActionListener(new ActionListener()
	 {
		 public void actionPerformed(ActionEvent e)
		 {
			 d2.setVisible(true);
			 System.out.println(d2.getDirectory()+d2.getFile());
		 }
	 });
	 f.add(b1);
	 f.add(b2);
	 f.pack();
	 f.setVisible(true);
 }
 




 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值