JAVA进阶(2)
事件监听
package Test;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* @author zxy
* 事件监听
* 按下按钮,触发一些事件
*/
public class TestActionEvent {
public static void main(String[] args) {
Frame frame = new Frame();
Button button = new Button();
/* addActionListener()需要一个ActionListener,所以构造一个ActionListener */
MyActionListener myActionListner = new MyActionListener();
button.addActionListener(myActionListner);
frame.add(button, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
windowClose(frame);
}
/**
* 关闭窗口的事件
* @param frame
*/
private static void windowClose(Frame frame) {
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("a");
}
}
输入框事件监听
package Test;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestText {
public static void main(String[] args) {
/* 启动 */
new MyFrame();
}
}
class MyFrame extends Frame{
public MyFrame() {
/* TextField单行文本 TextArea多行文本 */
TextField textField = new TextField();
add(textField);
/* 监听文本框输入的文字 */
MyActionListener2 myActionListener = new MyActionListener2();
/* 按下enter 就会触发这个文本框的事件 */
textField.addActionListener(myActionListener);
/* 设置替换编码 文本框的显示 但后台可以获得完整文本*/
textField.setEchoChar('*');
setVisible(true);
pack();
}
}
class MyActionListener2 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
/* 获得一些资源 返回的一个对象 */
TextField field = (TextField)e.getSource();
/* 获得文本框内容并输出 */
System.out.println(field.getText());
/* 获得文本输出后按下enter清空文本框 设为""字符串而不是null(对象) */
field.setText("");
}
}
实践:简易计算器
package Test;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author zxy
* 简易计算器
* 输入两个数 按下'='键即可计算出两者之和,同时清除前两个数
*/
public class TestCalc {
public static void main(String[] args) {
new Calculator();
}
}
/**
* @author zxy
* 计算器类
*/
class Calculator extends Frame{
public Calculator() {
/* 三个文本框 */
TextField num1 = new TextField(10);//字符数
TextField num2 = new TextField(10);//字符数
TextField num3 = new TextField(20);//字符数
/* 一个按钮 需要设置监听事件 */
Button button = new Button("=");
button.addActionListener(new MyCalculatorLisener(num1, num2, num3));
/* 一个标签 */
Label label = new Label("+");
/* 布局 采用流式布局 */
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
}
}
/**
* @author zxy
* 监听器类
*/
class MyCalculatorLisener implements ActionListener{
/* 用构造器获取三个变量 */
private TextField num1;
private TextField num2;
private TextField num3;
public MyCalculatorLisener(TextField num1, TextField num2, TextField num3) {
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
/* 获得加数和被加数 */
int n1 = Integer.parseInt(num1.getText());//将文本框里的内容转为int型
int n2 = Integer.parseInt(num2.getText());
/* 将这两个值加法运算后放到第三个框里 */
num3.setText(""+(n1+n2));
/* 清除前两个框 */
num1.setText("");
num2.setText("");
}
}
注:本篇代码均可直接运行,放在Test包内,但均未写窗口关闭相关内容,如需关闭结束程序运行即可