可以运行,不过没有满足要求,点击ok按钮后没有实现监视器policelistener中的计算功能,求能人帮忙解答
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;//?这个应该属于java.awt
public class Example9_7
{
public static void main(String args[])
{
WindowActionEvent win=new WindowActionEvent();
PoliceListen police=new PoliceListen();//创建监视器
win.setMyCommandListener(police);//窗口组合监视器
win.setBounds(100,100,460,360);
win.setTitle("处理事件");
}
}
class WindowActionEvent extends JFrame//组件加入事件,处理事件
{
JTextField text1;//p1.x
JTextField text2;//p1.y
JTextField text3;//p2.xa
JTextField text4;//p2.y
JTextArea text5;//创建分别访问数据的文本框
JButton button;//加入确认按钮,这个按钮是事件源?
MyCommandListener listener;//Actionlistener的子类创建listener
public WindowActionEvent()
{
init();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init()
{
setLayout(new FlowLayout());
text1=new JTextField(10);//这个部分是怎样操作文本框的?
text2=new JTextField(10);
text3=new JTextField(10);
text4=new JTextField(10);//分配空间给出参数
text5=new JTextArea(9,20);
button=new JButton("OK");
add(new JLabel("p1.x:"));//Label为为用户提供信息的标签
add(text1);
add(new JLabel("p1.y:"));
add(text2);
add(new JLabel("p2.x:"));
add(text3);
add(new JLabel("p2.y:"));
add(text4);//将文本框加入容器
add(button);
add(new JLabel("result:"));//???注意此处原文给出的是文本区
add(new JScrollPane(text5));
}
void setMyCommandListener(MyCommandListener Listener)//函数作用是设置我的监听器,参数是我的监听器
{
this.listener=listener;//调用设置方法将某个对象设置为自己的监听器
listener.setJTextField1(text1);
listener.setJTextField2(text2);
listener.setJTextField3(text3);
listener.setJTextField4(text4);//通过listener调用以后会用到的函数
listener.setJTextArea(text5);//text5是用来输出的
button.addActionListener(listener);//此时事件源是button
}
}
interface MyCommandListener extends ActionListener
{
public void setJTextField1(JTextField text);
public void setJTextField2(JTextField text);
public void setJTextField3(JTextField text);
public void setJTextField4(JTextField text);
public void setJTextArea(JTextArea area);
}//此类是ActionListenr的子类,而父类只有一个actionperformed函数
class PoliceListen implements MyCommandListener//负责创建监视器的类
{
JTextField text1;
JTextField text2;
JTextField text3;
JTextField text4;
JTextArea text5;//注意text5是用来显示
public void setJTextField1(JTextField text)
{
text1=text;
}
public void setJTextField2(JTextField text)
{
text2=text;
}
public void setJTextField3(JTextField text)
{
text3=text;
}
public void setJTextField4(JTextField text)
{
text4=text;
}
public void setJTextArea(JTextArea Area)
{
text5=Area;
}//此处是向文本框传递文本
public void actionPerformed(ActionEvent e)
{
double d=0;
double x1=Double.parseDouble(text1.getText());
double y1=Double.parseDouble(text2.getText());
double x2=Double.parseDouble(text3.getText());
double y2=Double.parseDouble(text1.getText());
d=((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
text5.append("距离是:"+d);
}
}