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