Listener 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。
时间: 2024-04-06 08:34:12 浏览: 10
是的,您说的很正确。在Java中,Listener(监听器)是一种用于监听对象状态或事件的机制。当被监听的对象发生变化时,相应的监听器会得到通知并进行相应的处理,可以实现对象之间的解耦和灵活的交互。例如,在Servlet中,可以通过添加监听器来监听ServletContext、HttpSession、ServletRequest等对象的状态和事件,从而实现更加灵活的应用开发。
相关问题
修改程序Example11_13.java,要求按照MVC开发模式来编写,设计一个MathListener.java,实现对ActionEvent事件的监听,不再使用窗体做监视器对象
下面是重构后的程序,按照MVC模式进行了设计:
Triangle.java (Model)
```java
public class Triangle {
private double a, b, c;
public Triangle() {
a = b = c = 0;
}
public void setA(double a) {
this.a = a;
}
public void setB(double b) {
this.b = b;
}
public void setC(double c) {
this.c = c;
}
public double getArea() {
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
}
```
WindowTriangle.java (View)
```java
import javax.swing.*;
import java.awt.*;
public class WindowTriangle extends JFrame {
private JTextField txtA, txtB, txtC, txtArea;
private JButton btnCalc;
public WindowTriangle() {
setTitle("Triangle");
setSize(250, 150);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p1 = new JPanel(new GridLayout(4, 2));
p1.add(new JLabel("Side A:"));
txtA = new JTextField(5);
p1.add(txtA);
p1.add(new JLabel("Side B:"));
txtB = new JTextField(5);
p1.add(txtB);
p1.add(new JLabel("Side C:"));
txtC = new JTextField(5);
p1.add(txtC);
p1.add(new JLabel("Area:"));
txtArea = new JTextField(10);
txtArea.setEditable(false);
p1.add(txtArea);
JPanel p2 = new JPanel();
btnCalc = new JButton("Calculate");
p2.add(btnCalc);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(p1, BorderLayout.CENTER);
getContentPane().add(p2, BorderLayout.SOUTH);
}
public double getA() {
return Double.parseDouble(txtA.getText());
}
public double getB() {
return Double.parseDouble(txtB.getText());
}
public double getC() {
return Double.parseDouble(txtC.getText());
}
public void setArea(double area) {
txtArea.setText(String.format("%.2f", area));
}
public void addMathListener(MathListener listener) {
btnCalc.addActionListener(listener);
}
}
```
MathListener.java (Controller)
```java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MathListener implements ActionListener {
private Triangle model;
private WindowTriangle view;
public MathListener(Triangle model, WindowTriangle view) {
this.model = model;
this.view = view;
}
@Override
public void actionPerformed(ActionEvent e) {
try {
double a = view.getA();
double b = view.getB();
double c = view.getC();
model.setA(a);
model.setB(b);
model.setC(c);
double area = model.getArea();
view.setArea(area);
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(view, "Invalid input!", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
```
Example11_13.java (Main)
```java
public class Example11_13 {
public static void main(String[] args) {
Triangle model = new Triangle();
WindowTriangle view = new WindowTriangle();
MathListener controller = new MathListener(model, view);
view.addMathListener(controller);
view.setVisible(true);
}
}
```
重构后,程序按照MVC模式进行了设计,MathListener.java实现了对ActionEvent事件的监听,不再使用窗体做监视器对象。
事件监听器的功能和作用是什么
事件监听器(Event Listener)是一种编程概念,用于捕获和处理特定事件的发生。它的功能是监视指定的事件,并在事件触发时执行相应的操作。
事件监听器的作用是实现程序的响应式设计,使程序能够对用户的行为或系统的状态变化做出及时的反应。它可以用于图形用户界面(GUI)应用程序中,监听用户的鼠标点击、键盘输入等操作;也可以用于Web开发中,监听浏览器的页面加载、按钮点击、表单提交等事件;还可以用于服务器端开发,监听网络请求的到达、数据库操作的完成等事件。
通过事件监听器,程序可以根据不同的事件类型执行相应的逻辑,例如更新界面显示、处理用户输入、发送网络请求、保存数据等。它提供了一种灵活且可扩展的机制,使程序能够更加交互和动态。