当在处理按钮等监听事件时,需要注册监听器,监听器的位置不同,角色就不同,访问的区域就不同。
内部类是在另一个类中声明的,包含内部类的类叫做外嵌类
内部类和外嵌类的关系:
1.内部类的外嵌类的成员变量在内部类中仍有效,内部类的方法也可以调用外嵌类的方法。即内部类可以访问外部类的变量和方法。
2.在内部类的类体中不可以申明类变量和类方法,外嵌类的类体重可以用内部类声明对象作为外嵌类的成员。
三个按钮控制面板的三种颜色
import java.awt.*;
import javax.swing.*;
public class ButtonTest
{
public static void main(String[] args)
{
JFrame frame = new ButtonFrame();
frame.setTitle("ButtonTest"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonFrame extends JFrame
{
private JPanel buttonPanel;
private static final int DEFAULT_WIDTH = 400;
private static final int DEFAULT_HEIGHT = 300;
public ButtonFrame()
{
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
// 创建按钮对象
JButton yellowButton = new JButton("Yellow");
JButton blueButton = new JButton("Blue");
JButton redButton = new JButton("Red");
buttonPanel = new JPanel();
// 添加按钮到画板
buttonPanel.add(yellowButton);
buttonPanel.add(blueButton);
buttonPanel.add(redButton);
add(buttonPanel);
// 创建按钮监听器
ColorListener yellowListener = new ColorListener(Color.YELLOW);
ColorListener blueListener = new ColorListener(Color.BLUE);
ColorListener redListener = new ColorListener(Color.RED);
// 为每个按钮设置监听器
yellowButton.addActionListener(yellowListener);
blueButton.addActionListener(blueListener);
redButton.addActionListener(redListener);
}
//内部类监听器
private class ColorListener implements ActionListener
{
private Color backgroundColor;
public ColorListener(Color c) {
backgroundColor = c;
}
public void actionPerformed(ActionEvent event) {
buttonPanel.setBackground(backgroundColor);//内部类可以访问外部类的变量
}
}
}