李尊朝java例题解析第四版_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();

}

}

a7a4926065d6277e6f1e0a74fb543db0.png

例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();

}

}43a1d82609d9a9a429dea6ed642ce6cd.pnge36968bca2276d6b496d02a3f8db2c31.png例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)

{ }

}

def17d1672575ec0531ce213ec680a7f.png

例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);

}

}

}

56c6a447f716c4551794f3f7248106e1.png        08bb07299548c8cc6d93499976fcdcd5.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值