java怎么实现在一个类中放置监听器,而在另一个类中事件呢?

2024-12-26 07:01:43
推荐回答(2个)
回答1:

在A类中new一个B类...在给A类的按钮添加监听时...添加的是B类的监听...
例如:(简写,希望看得懂)
class A extends JFrame
{
public A()

{

X = new B();
…… //省略,假设这里new了各种组件

A的某个组件.addActionListener(X); //给组件添加B的监听,这样这个组件在触发某个事件时,就可以调用B类中的事件了

}

}

class B implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
…… //这是写触发时说要做的事...当A中添加了B类监听的组件相应触发事件时,就会自动调用这里了

}
}

总而言之,就是当你想使用某个类(B)作为对于触发事件的处理时,就让这个类(B)去implements监听,然后在你需要的组件上添加对B的监听(组件.addXXXListener(X))就可以了...
addXXXListener(?),这个函数在触发了事件时,会自动去找?类中相应的方法去处理事件...

回答2:

//这是A类

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class MyFrame extends JFrame {
private JButton addButton;
private JTextField resultText;

public static void main(String[] args) {
new MyFrame();
}

public MyFrame() {
setSize(400, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new FlowLayout());
resultText = new JTextField(20);
addButton = new JButton("+1");
addButton.addActionListener(new AddButtonAction(resultText));
add(resultText);
add(addButton);
setVisible(true);
}
}
//这是B类
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;

public class AddButtonAction implements ActionListener {
private JTextField resultText;

public AddButtonAction(JTextField resultText) {
this.resultText = resultText;
}

public void actionPerformed(ActionEvent e) {
try {
int value = Integer.parseInt(resultText.getText());
resultText.setText(String.valueOf(value + 1));
} catch (NumberFormatException ne) {
resultText.setText("your input string is not a number!");
}
}
}