标签和按钮也许是图形界面中最常见的两种组件,按钮又总是与激发动作事件有关。
标签(JLabel)是最简单的Swing组件。标签对象的作用是对位于其后的界面组件作说明。可以设置标签的属性,即前景色,背景色、字体等,但不能动态地编辑标签中的文本。
程序关于标签的基本内容有以下几个方面:
JLabel类的主要构造方法是:
JLabel类的其他常用方法是:
按钮(JButton)在界面设计中用于激发动作事件。按钮可显示文本,当按钮被激活时,能激发动作事件。
JButton常用构造方法有:
JButton类的其他常用方法有:
按钮处理动作事件的基本内容有以下几个方面:
1 addActionListener(this);参见【例 11-3】,如果是别的类A的对象a作为监视器,类A必须实现ActionListener接口,完成监视器注册需用以下形式的两行代码:
1 A a = new A(); //创建类A的实例a 2 addActionListener(a); //用对象a作为监视器对事件进行监视。
1 public void actionPerformed(ActionEvent e);
在处理事件的方法中,用获取事件源信息的方法获得事件源信息,并判断和完成相应处理。获得事件源的方法有:方法 getSource()获得事件源对象;方法getActionCommand()获得事件源按钮的文字信息。
1 【例 11-3】处理按钮事件实例,应用程序定义了一个窗口,窗口内设置两个按钮,当点击Red按钮时,窗口的背景色置成红色;点击Green按钮时,窗口的背景色置成绿色。
2 import javax.swing.*;import java.awt.*;import java.awt.event.*; 3 public class J503{ 4 public static void main(String[]args){ 5 ButtonDemo myButtonGUI=new ButtonDemo();//声明并创建按钮对象 6 myButtonGUI.setVisible(true); 7 } 8 } 9 class ButtonDemo extends JFrame implements ActionListener{ 10 public static final int Width=250; 11 public static final int Height=200; 12 ButtonDemo(){ 13 setSize(Width,Height); setTitle("按钮事件样例"); 14 Container conPane=getContentPane(); 15 conPane.setBackground(Color.BLUE); 16 conPane.setLayout(new FlowLayout());//采用FlowLayout布局 17 JButton redBut=new JButton("Red"); 18 redBut.addActionListener(this);//给Red按钮注册监视器 19 conPane.add(redBut);//在窗口添加Red按钮 20 JButton greenBut=new JButton("Green"); 21 greenBut.addActionListener(this);//给Green按钮注册监视器 22 conPane.add(greenBut);//在窗口添加Green按钮 23 } 24 public void actionPerformed(ActionEvent e){//实现接口处理事件的方法 25 Container conPane=getContentPane(); 26 if(e.getActionCommand().equals("Red"))//是Red按钮事件 27 conPane.setBackground(Color.RED); 28 else if(e.getActionCommand().equals("Green"))//是Green按钮事件 29 conPane.setBackground(Color.GREEN); 30 else{} 31 } 32 }
用鼠标点击按钮产生事件对象,将事件送达对象,这个过程称为激发事件。当一个事件被送到监视器对象时,监视器对象实现的接口方法被调用,调用时系统会提供事件对象的参数。程序中虽然没有调用监视器方法的的代码,但是程序做了两件事:第一,指定哪一个对象是监视器,它将响应由按钮的激发的事件,这个步骤称为监视器注册。第二,必须定义一个方法,当事件送到监视器时,这个方法将被调用。程序中没有调用这个方法的代码,这个调用是系统执行的。
在上面的程序中,代码
redBut.addActionListener(this);
注册this作为redBut按钮的监视器,随后的代码也注册this作为greenBut按钮的监视器。在上述的程序中,this就是当前的ButtonDemo对象myButtonGUI。这样,ButtonDemo类就是监视器对象的类,对象MyButtonGUI作为两个按钮的监视器。在类ButtonDemo中有监视器方法的实现。当一个按钮被点击时,系统以事件的激发者为参数,自动调用方法actionPerformed ()。
组件不同,激发的事件种类也不同,监视器类的种类也不同。按钮激发的事件称为action事件,相应的监视器称为action监视器。一个action监视器对象的类型为ActionListener,类要实现ActionListener接口。程序体现这些内容需要做到两点:
前面程序中的类ButtonDemo正确地做到了这两点。
每个界面元素当激发事件时,都有一个字符串与这个事件相对应,这个字符串称为action命令。用代码 e.getActionCommand()就能获取action事件参数e的命令字符串,据此,方法actionPerformed()就能知道是哪一个按钮激发的事件。在默认情况下,按钮的命令字符串就是按钮上的文字。如有必要可以用方法 setActionCommand()为界面组件设置命令字符串。