虽然事件接口和事件源繁多复杂, 但是处理事件的基本原理却很简单:
即想要接受某个事件的类实现该事件监听器的接口,然后在事件源中注册自己,这样它就可以接收所要的事件,并通过监听器接口中的方法进行处理。此文中使用了三个监听器对象,一个是随机颜色按钮的监听器ColorActionListener,还有另外两个new出来的分别实现了颜色变暗和颜色变亮的监听器对象。
事件源分别是随机颜色Button的ActionEvent对象,颜色变暗和颜色变亮的ActionEvent对象。
当事件源对象发生ActionEvent事件的时候,会产生ActionEvent对象,此时编译器会把这个事件对象传个注册在该事件源的接口,由相应接口执行操作。充分体现了用户为主的操作体验,根据用户的动作来做出响应。这是事件驱动机制很好的地方,个人拙见。呵呵
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonFrame extends SimpleFrame{
public ButtonFrame(int width,int height){
super(width,height);
setTitle("这是个按钮事件啊!");
ColorPanel panel=new ColorPanel();
Container contentPane=getContentPane();//返回此窗体的contentPane 对象
contentPane.add(panel);
}
/*注释用:getContentPane
public Container getContentPane()
返回此窗体的 contentPane 对象
指定者:
接口 RootPaneContainer 中的 getContentPane
返回:
contentPane 属性*/
//定义主函数,用来驱动ButtonFrame类
public static void main(String[] args) {
ButtonFrame frame=new ButtonFrame(400,300);
frame.setVisible(true);
}
}
class ColorPanel extends JPanel{
public ColorPanel(){
//创建组件
colorButton =new JButton("随机颜色");
darkerButton=new JButton("颜色变暗");
brighterButton=new JButton("颜色变亮");
colorText=new JTextArea(10,30);
// 添加组件
add(new JScrollPane(colorText));
add(colorButton);
add(darkerButton);
add(brighterButton);
setBackground(backgroundColor);
//注册组件所监听的事件
colorButton.addActionListener(new ColorActionListener());
brighterButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
setBrighter();
}
});
darkerButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
setDarker();
}
});
}
private void setBrighter(){
backgroundColor=backgroundColor.brighter();
changeColor();
}
private void setDarker(){
backgroundColor=backgroundColor.darker();
changeColor();
}
private class ColorActionListener implements ActionListener{
public void actionPerformed(ActionEvent event){
setColor();//设置面板的颜色
}
}
private void changeColor(){
int r=backgroundColor.getRed();
int g=backgroundColor.getGreen();
int b=backgroundColor.getBlue();
colorText.append("颜色值:\tR="+r+"\t G="+g+"\t B="+b+"\n");
this.setBackground(backgroundColor);
}
private void setColor(){
//产生随机颜色
int r=(int)(Math.random()*255);
int g=(int)(Math.random()*255);
int b=(int)(Math.random()*255);
colorText.append("颜色值:\tR="+r+"\t G="+g+"\t B="+b+"\n");
backgroundColor=new Color(r,g,b);//非常的重要, 我这句话少写了,弄了很长时间才弄好
this.setBackground(backgroundColor);
}
private Color backgroundColor;
private JButton colorButton;
private JButton darkerButton;
private JButton brighterButton;
private JTextArea colorText;
}
Tags -
课本习题
文章来源:
http://www.tt-shopping.com/kevinlau/read.php/113.htm