一、事件监听
测试代码一:
package cn.javastudy.summary;
import java.awt.*;
import java.awt.event.*;
public class TestTextField {
public static void main(String args[]) {
new MyframeTextField();
}
}
class MyframeTextField extends frame {
MyframeTextField() {
TextField tf = new TextField();
add(tf);
tf.addActionListener(new Monitor3());
tf.setEchoChar('*');
setVisible(true);
pack();
}
}
class Monitor3 implements ActionListener {
public void actionPerformed(ActionEvent e) {
TextField tf = (TextField) e.getSource();
System.out.println(tf.getText());// tf.getText()是取得文本框里面的内容
tf.setText("");// 把文本框里面的内容清空
}
}
测试代码二:
package cn.javastudy.summary;
import java.awt.*;
import java.awt.event.*;
public class TestActionEvent2{
public static void main(String args[]){
frame f = new frame("TestActionEvent");
Button btn1 = new Button("start");
Button btn2 = new Button("stop");
Monitor2 m2 = new Monitor2();//创建监听对象
btn1.addActionListener(m2);
btn2.addActionListener(m2);
btn2.setActionCommand("GameOver");//设置btn2的执行单击命令后的返回信息
f.add(btn1,BorderLayout.NORTH);
f.add(btn2,BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
}
class Monitor2 implements ActionListener{
public void actionPerformed(ActionEvent e){
System.out.println("a button has been pressed,"+"the relative info is:n"+e.getActionCommand());
}
}
二、TextField事件监听
测试代码:
package cn.javastudy.summary;
import java.awt.*;
import java.awt.event.*;
public class TestTextField {
public static void main(String args[]) {
new MyframeTextField();
}
}
class MyframeTextField extends frame {
MyframeTextField() {
TextField tf = new TextField();
add(tf);
tf.addActionListener(new Monitor3());
tf.setEchoChar('*');
setVisible(true);
pack();
}
}
class Monitor3 implements ActionListener {
public void actionPerformed(ActionEvent e) {
TextField tf = (TextField) e.getSource();
System.out.println(tf.getText());// tf.getText()是取得文本框里面的内容
tf.setText("");// 把文本框里面的内容清空
}
}
使用TextField类实现简单的计算器
package cn.javastudy.summary;
import java.awt.*;
import java.awt.event.*;
public class TestMath {
public static void main(String args[]) {
new TFframe();
}
}
class TFframe extends frame {
TFframe() {
TextField num1 = new TextField(10);
TextField num2 = new TextField(10);
TextField num3 = new TextField(15);
Button btnEqual = new Button("=");
btnEqual.addActionListener(new MyMonitor(num1, num2, num3));
Label lblPlus = new Label("+");
setLayout(new FlowLayout());
add(num1);
add(lblPlus);
add(num2);
add(btnEqual);
add(num3);
pack();
setVisible(true);
}
}
class MyMonitor implements ActionListener {
TextField num1, num2, num3;
public MyMonitor(TextField num1, TextField num2, TextField num3) {
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
}
public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
num3.setText("" + (n1 + n2));
num1.setText("");
num2.setText("");
// num3.setText(String.valueOf((n1+n2)));
}
}
JAVA里面的经典用法:在一个类里面持有另外一个类的引用
package cn.javastudy.summary;
import java.awt.*;
import java.awt.event.*;
public class TestMath1 {
public static void main(String args[]) {
new TTMyframe().launchframe();
}
}
class TTMyframe extends frame {
TextField num1, num2, num3;
public void launchframe() {
num1 = new TextField(10);
num2 = new TextField(15);
num3 = new TextField(15);
Label lblPlus = new Label("+");
Button btnEqual = new Button("=");
btnEqual.addActionListener(new MyMonitorbtnEqual(this));
setLayout(new FlowLayout());
add(num1);
add(lblPlus);
add(num2);
add(btnEqual);
add(num3);
pack();
setVisible(true);
}
}
class MyMonitorbtnEqual implements ActionListener {
TTMyframe ttmf = null;
public MyMonitorbtnEqual(TTMyframe ttmf) {
this.ttmf = ttmf;
}
public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(ttmf.num1.getText());
int n2 = Integer.parseInt(ttmf.num2.getText());
ttmf.num3.setText("" + (n1 + n2));
ttmf.num1.setText("");
ttmf.num2.setText("");
}
}
运行结果如下:
三、内部类
内部类的使用范例:
package cn.javastudy.summary;
import java.awt.*;
import java.awt.event.*;
public class TestMath3 {
public static void main(String args[]) {
new MyMathframe().launchframe();
}
}
class MyMathframe extends frame {
TextField num1, num2, num3;
public void launchframe() {
num1 = new TextField(10);
num2 = new TextField(15);
num3 = new TextField(15);
Label lblPlus = new Label("+");
Button btnEqual = new Button("=");
btnEqual.addActionListener(new MyMonitor());
setLayout(new FlowLayout());
add(num1);
add(lblPlus);
add(num2);
add(btnEqual);
add(num3);
pack();
setVisible(true);
}
private class MyMonitor implements ActionListener {
public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
num3.setText("" + (n1 + n2));
num1.setText("");
num2.setText("");
}
}
}
内部类带来的巨大好处是:
- 可以很方便地访问外部类定义的成员变量和方法
- 当某一个类不需要其他类访问的时候就把这个类声明为内部类。
四、Graphics 类
测试代码:
package cn.javastudy.summary;
import java.awt.*;
public class TestPaint{
public static void main(String args[]){
new MyPaint().launchframe();
}
}
class MyPaint extends frame{
public void launchframe(){
setBounds(200,200,640,480);
setVisible(true);
}
public void paint(Graphics g){
g.setColor(Color.red);
g.fillOval(100,100,100,100);
g.setColor(Color.green);
g.fillRect(150,200,200,200);
Color c = g.getColor();
g.setColor(c);
}
}
运行结果:
五、鼠标事件适配器
测试代码:
package cn.galc.test;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class MyMouseAdapter{
public static void main(String args[]) {
new Myframe("drawing...");
}
}
class Myframe extends frame {
ArrayList points = null;
Myframe(String s) {
super(s);
points = new ArrayList();
setLayout(null);
setBounds(300,300,400,300);
this.setBackground(new Color(204,204,255));
setVisible(true);
this.addMouseListener(new Monitor());
}
public void paint(Graphics g) {
Iterator i = points.iterator();
while(i.hasNext()){
Point p = (Point)i.next();
g.setColor(Color.BLUE);
g.fillOval(p.x,p.y,10,10);
}
}
public void addPoint(Point p){
points.add(p);
}
}
class Monitor extends MouseAdapter {
public void mousePressed(MouseEvent e) {
Myframe f = (Myframe)e.getSource();
f.addPoint(new Point(e.getX(),e.getY()));
f.repaint();
}
}
六、window事件
测试代码:
package cn.galc.test;
import java.awt.*;
import java.awt.event.*;
public class TestWindowClose{
public static void main(String args[]){
new Windowframe("关闭Windowframe");
}
}
class Windowframe extends frame{
public Windowframe(String s){
super(s);
setBounds(200,200,400,300);
setLayout(null);
setBackground(new Color(204,204,255));
setVisible(true);
this.addWindowListener(new WindowMonitor());
this.addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
setVisible(false);
System.exit(-1);
}
}
);
}
class WindowMonitor extends WindowAdapter{
public void windowClosing(WindowEvent e){
setVisible(false);
System.exit(0);
}
}
}
七、键盘响应事件——KeyEvent
测试代码:
package cn.galc.test;
import java.awt.*;
import java.awt.event.*;
public class TestKeyEvent{
public static void main(String args[]){
new Keyframe("键盘响应事件");
}
}
class Keyframe extends frame{
public Keyframe(String s){
super(s);
setBounds(200,200,400,300);
setLayout(null);
setVisible(true);
addKeyListener(new KeyMonitor());
}
class KeyMonitor extends KeyAdapter{
public void keyPressed(KeyEvent e){
int keycode = e.getKeyCode();
if(keycode == KeyEvent.VK_UP){
System.out.println("你按的是up键");
}
}
}
}
通过这篇文章和大家一起学习了GUI编程,希望大家对GUI编程有了更全面的认识,关于GUI编程远不止这些,还需要大家继续学习。



