java语言程序设计 李尊朝 典型例题解析

例11-1 编写一个程序,在屏幕上显示带标题的窗口,并添家一个按钮。当用户单按钮时,结束程序

解析:

     具有事件处理功能的GUI程序需要导入java.awt和java.awt.event包中的所有类,并定义一个继承Frame的类,定义组件,为组件注册事件监听器,实现覆盖监听器接口或适配器类中的方法,进行事件处理。

    本例中,定义了一个Button 组件quit,quit的监听器是实现ActionListener接口的FirstFrame类对象this.FirstFrame实现了ActionListener接口中的ActionPerformed()方法,其功能是结束程序运行。

package typicalExamples11_1;

import java.awt.*;
import java.awt.event.*;
public class FirstFrame extends Frame implements ActionListener 
{
    private Button quit=new Button("退出");
    public FirstFrame()
    {
         super("First Window");
         add(quit);
         quit.addActionListener(this);
         setSize(250, 80);
        setVisible(true);
     }
    public void actionPerformed(ActionEvent e) 
       {
         System.exit(0);
      }
 public static void main(String args[]) 
    {
         FirstFrame ff = new FirstFrame();        
    }
}

image

例11-2 编写一个窗口程序,窗口中有两个按钮和一个文本行。当单击第一个按钮时,结束程序运行:当单击第二个按钮时,文本行显示该按钮被单击的次数。

解析:

         定义Button组件quit和click及TextField 组件txf。quit和click的监听器都是实现ActionListener接口的ClickButton类对象this.ClickButton实现了ActionListerner

         接口中的actionPerformed()方法。在actionPerformed()中,通过getSource()方法判断引起ActionEvent事件的事件源。如果事件源是quit,结束程序运行:如果事

         件源是click,首先给count变量的值加1,再在txf文本行中显洋count的值,即click被单击的次数。

package typicalExamples11_2;

import java.awt.*;
import java.awt.event.*;
public class ClickButton extends Frame implements ActionListener 
{
    private Button quit=new Button("  退出  ");
    private Button click=new Button("  单击  ");
    private TextField txf=new TextField("  还未单击按钮  ");
    private int count=0;
    public ClickButton()
    {
         super("Click Button");
         setLayout(new FlowLayout());
         add(quit);
         add(click);
         add(txf);
         quit.addActionListener(this);
         click.addActionListener(this);
         setSize(250, 100);
        setVisible(true);
     }
    public void actionPerformed(ActionEvent e) 
      {
        if (e.getSource()==quit)
                System.exit(0);
        else if (e.getSource()==click)
               {
                    count++;
                 txf.setText("单击了"+Integer.toString(count)+"次");
               }
     }
 public static void main(String args[]) 
    {
         ClickButton cb = new ClickButton();        
    }
}
image              image
例11-3 编写一窗口程序,实现以下功能:
        当用户按下q键或单击窗口关闭按钮时,结束程序运行;当用户按其字符键时,在屏幕上显示被按下的字符。
解析:
         要对键盘按键响应,需要对KeyEvent事件监听。KeyEvent事件监听器是实现KeyListener接口的类对象,该类要实现KeyListener接口中的抽象方法
         keyPressed()、keyreleased()和keyTyped().
         要关闭窗口,需要对windowevent事件监听。windowsevent事件监听器是实现windowListener接口的类对象,该类要实现windowlistener接口中的抽象方法
         windowClosing()、windowclosed()、windowDeactivated()、windowsActivated()、windowIconified()、windowDeiconified()和windowOpend().
         本例中,内部keyhandler实现Keylistener接口,并实现其中的抽象方法KEYpressed()、keyReleased()和keyTyped().keyhandler的对象担任keyevent事件的监
         听器。外部类windowHandler实现windowsListener接口,并实现其中的7个抽象方法。windowsHandler的对象handler担任windowsEvent事件的监听器。
         监听器所属类可定义为内部类(如 keyHandler)、外部类(如 windowHandler)或匿名类。其效果相同。监听器所属类不需要构造方法。
          
 
package typicalExamples11_3;

import java.awt.*;
import java.awt.event.*;
public class MultiEvent extends Frame 
{
    private WindowHandler handler=new WindowHandler();
    public MultiEvent()
    {
         super("MultiEvent");
         setLayout(new FlowLayout());
          addKeyListener(new KeyHandler());
         addWindowListener(handler);
          setSize(250, 100);
        setVisible(true);
     }
    
 public static void main(String args[]) 
    {
         MultiEvent me = new MultiEvent();        
    }
 class KeyHandler implements KeyListener
   {
    public void keyPressed(KeyEvent e)
    {
        if (e.getKeyChar()=='q')
            System.exit(0);
    }
    public void keyReleased(KeyEvent e)
    {
    }
    public void keyTyped(KeyEvent e)
    {
      System.out.println(e.getKeyChar()+ "is pressed!");
    }
  }    
}

class WindowHandler implements WindowListener
{
   public void windowClosing(WindowEvent e)
    {
              System.exit(0);
    }
   public void windowClosed(WindowEvent e)
    {       }
   public void windowActivated(WindowEvent e)
    {    }
     public void windowDeactivated(WindowEvent e)
    {    }
   public void windowIconified(WindowEvent e)
    {    }
   public void windowDeiconified(WindowEvent e)
   {       }
   public void windowOpened(WindowEvent e)
    {    }
 }

image

例11-4 编写一个窗口程序,包含一个文本行、两个按钮和一个文本区。当用户单击第一个按钮时,将文本行中的文本添加到文本区;当用户单击第一个按钮时,添加一个换行符后,将文本行中的文本添加到文本区。

解析:

要对第一个按钮add和第二个按钮addln的单击操作(触发ActionEvent事件)进行响应,要对其注册ActionEvent事件监听器。事件监听器由实现ActionListener接口的texts类对象this担任。text类实现了ActionListener接口中的actionPerformed()方法。在actionPerformed()方法中,通过getSource()获得事件源。如果事件源是add,仅将文本行txf中的文本添加到文本区txa中;如果事件源是addln,首先在txa添加一个换行符,再将txf中的文本添加到txa中。

要对窗口关闭操作进行响应对其注岫windowEvent事件监听器,事件监听器由继承windowsAdapter适配器类的内部类WindowHandler的对象提任。windowsHandler覆盖了windowAdapter中的windowclosing()方法,用户单击窗口关闭按钮时,结束程序运行。

为了使窗口内组件排列整齐、美观、程序中使用了面板Panel组件pal。类似Frame,Panel也是一种容器类,可以馈含button、TextField和list等组件,可以设置版面。将其他组件放入Panel组件后,再将Panel组件嵌入窗口,易于实现窗口内组件的合理布局。

package typicalExamples11_4;

import java.awt.*;
import java.awt.event.*;
public class Texts extends Frame implements ActionListener
{
    private TextField txf=new TextField();
    private TextArea txa=new TextArea();
    private Button add=new Button("Add");
    private Button addln=new Button("AddLn");
    public Texts()
    {
         super("Texts");
         Panel pal=new Panel();
         pal.setLayout( new BorderLayout());
         pal.add(add,BorderLayout.WEST);
         pal.add(txf,BorderLayout.CENTER);
         pal.add(addln,BorderLayout.EAST);
         setLayout(new BorderLayout());
         add(pal,BorderLayout.NORTH);
         add(txa,BorderLayout.CENTER);
         add.addActionListener(this);
         addln.addActionListener(this);
         addWindowListener(new WindowHandler());
          setSize(300, 200);
        setVisible(true);
     }
    
  public static void main(String args[]) 
    {
         Texts me = new Texts();        
    }
    
  public void actionPerformed(ActionEvent e) 
      {
        if (e.getSource()==add)
                txa.append(txf.getText());
        else if (e.getSource()==addln)
               txa.append("\n"+txf.getText());
     }
 
   class WindowHandler extends WindowAdapter
    {
     public void windowClosing(WindowEvent e)
      {
              System.exit(0);
      }
    }
 }

image        image

posted @ 2013-05-17 23:05  elite_2012  阅读(671)  评论(0编辑  收藏  举报