Java監聽器的用法(一):內部類監聽器
阿新 • • 發佈:2018-12-26
當在處理按鈕等監聽事件時,需要註冊監聽器,監聽器的位置不同,角色就不同,訪問的區域就不同。
內部類是在另一個類中宣告的,包含內部類的類叫做外嵌類
內部類和外嵌類的關係:
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);//內部類可以訪問外部類的變數
}
}
}