事件監聽
實例代碼:
import java.awt.*;
import java.awt.event.*;
public class TestActionEvent{
public static void main(String[] args){
Frame f = new Frame("Test");
Button b = new Button("Press Me!");
Monitor bh = new Monitor();
b.addActionListener(bh);
f.add(b,BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
}
class Monitor implements ActionListener{
public void actionPerformed(ActionEvent e){
System.out.println("A button has been pressed");
}
}
TextFiled類
- TextFiled對象可能發生Action事件,與該事件對應的事件是java.awt.event.ActionEvent;
- 用來處理ActionEvent事件是實現了java.awt.event.ActionListener接口的類的對象,ActionListener接口定義有方法:public void actionPerformed(ActionEvent e);
- 實現該接口的類要在該方法中添加處理該事件的語句;
- 使用addActionListener(ActionListener I)方法爲TextField對象註冊一個ActionListener對象,當TextField對象發生Action事件的時候,會生成一個ActionEvent對象,該對象作爲參數傳遞給ActionListener對象的actionPerformer方法在方法中可以獲取該對象的信息,並做相應的處理。
實例代碼:
import java.awt.*;
import java.awt.event.*;
public class TFActionEvent{
public static void main(String[] args){
new TFFrame();
}
}
class TFFrame extends Frame{
TFFrame(){
TextField tf = new TextField();
add(tf);
tf.addActionListener(new TFActionListener());
pack();
setVisible(true);
}
}
class TFActionListener implements ActionListener{
public void actionPerformed(ActionEvent e){
TextField tf = (TextField)e.getSource();
System.out.println(tf.getText());
tf.setText(" ");
}
}
內部類
- 可以非常方便的訪問包裝類的成員變量和成員方法;
- 該類不允許或不需要其他類進行訪問時。
實例代碼:
import java.awt.*;
import java.awt.event.*;
public class TFMath1{
public static void main(String[] args){
//調用launchFrame方法
new TFFrame().launchFrame();
}
}
//繼承Frame類
class TFFrame extends Frame{
//爲了actionPerformed方法能拿到num裏的數,把它聲明爲成員變量
TextField num1,num2,num3;
//讓Frame運行起來
public void launchFrame(){
//添加控件
num1 = new TextField(10);
num2 = new TextField(10);
num3 = new TextField(10);
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);
}
class MyMonitor implements ActionListener{
public void actionPerformed(ActionEvent e){
//拿到num裏的數轉換成Integer
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
num3.setText(""+(n1+n2));
}
}
}
Graphics類
- 每個Component都有一個paint(Graphics g)用於實現繪圖目的,每次重畫該component是都自動調用paint方法;
- Graphics類中提供該類許多繪圖方法,如:drawRect(int x,int y,int width,int height)
實例代碼:
import java.awt.*;
public class TestPaint{
public static void main(String[] args){
new PaintFrame().launchFrame();
}
}
class PaintFrame extends Frame{
public void launchFrame(){
setBounds(200,200,640,480);
setVisible(true);
}
public void paint(Graphics g){
Color c = g.getColor();
g.setColor(Color.green);
g.fillOval(50,50,50,50);
g.setColor(Color.blue);
g.fillRect(80,80,80,80);
g.setColor(c);
}
}
鼠標事件適配器
- 抽象類java.awt.event.MouseAdapter實現了MouseListener接口,可以使用其子類作爲MouseEvent的監聽器,只要重寫其相應的方法即可;
- 對於其他的監聽器,也有對應的適配器;
- 使用適配器可以避免監聽器類定義沒有必要的空方法;
- GUI/MyMouseAdapter.java鼠標適配器;
- repaint-updata()-paint()
實例代碼:
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,300,300);
this.setBackground(new Color(204,204,204));
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.RED);
g.fillOval(p.x,p.y,8,8);
}
}
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();
}
}
匿名類
實例代碼:
import java.awt.*;
import java.awt.event.*;
public class TestAnonymouse{
Frame f = new Frame("Test");
TextField tf = new TextField(10);
Button b = new Button("Start");
public TestAnonymouse(){
f.add(b,"North");
f.add(tf,"South");
b.addActionListener(new ActionListener(){
private int i;
public void actionPerformed(ActionEvent e){
tf.setText(e.getActionCommand() + ++i);
}
});
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
f.pack();
f.setVisible(true);
}
public static void main(String args[]){
new TestAnonymouse();
}
}
鍵盤事件
實例代碼:
import java.awt.*;
import java.awt.event.*;
public class TestKey{
public static void main(String[] args){
new KeyFrame().launchFrame();
}
}
class KeyFrame extends Frame{
public void launchFrame(){
setSize(300,300);
setLocation(400,400);
addKeyListener(new MyKeyMonitor());
setVisible(true);
}
class MyKeyMonitor extends KeyAdapter{
public void keyPressed(KeyEvent e){
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_UP){
System.out.println("UP");
}
}
}
}