J2SE之GUI编程

AWT

Componet & Container

Frame

/*    范例名称:Frame 应用举例
 *     源文件名称:TestFrame.java
 *    要  点:Frame组件的创建及显示设置
 */

import java.awt.*;
public class TestFrame {
    public static void main( String args[]) {
        Frame f = new Frame("My First Test");
        f.setLocation(300, 300);
        f.setSize( 170,100);
        f.setBackground( Color.blue);
        f.setResizable(false);
        f.setVisible( true);
    }
}
TestFrame
import java.awt.*;

public class TestMultiFrame {
    public static void main(String args[]) {
        MyFrame f1 = 
            new MyFrame(100,100,200,200,Color.BLUE);
        MyFrame f2 = 
            new MyFrame(300,100,200,200,Color.YELLOW);
        MyFrame f3 = 
            new MyFrame(100,300,200,200,Color.GREEN);
        MyFrame f4 = 
            new MyFrame(300,300,200,200,Color.MAGENTA);
    }
}




class MyFrame extends Frame{
    static int id = 0;
    MyFrame(int x,int y,int w,int h,Color color){
        super("MyFrame " + (++id));
        setBackground(color);
        setLayout(null);
        setBounds(x,y,w,h);
        setVisible(true);
    }
}
TestMultiFrame

Pannel

import java.awt.*;

public class TestPanel {
     public static void main(String args[]) {
              Frame f = 
             new Frame("Java Frame with Panel");
         Panel p = new Panel(null);
         f.setLayout(null);
         f.setBounds(300,300,500,500);
         f.setBackground(new Color(0,0,102));
         p.setBounds(50,50,400,400);
         p.setBackground(new Color(204,204,255));
         f.add(p);
         f.setVisible(true);
    }
}
TestPanel
import java.awt.*;

public class TestMultiPanel {
    public static void main(String args[]) {
        new MyFrame2("MyFrameWithPanel",300,300,400,300);
    }
}


class MyFrame2 extends Frame{
    private Panel p1,p2,p3,p4;
    MyFrame2(String s,int x,int y,int w,int h){
        super(s);
        setLayout(null);
        p1 = new Panel(null); p2 = new Panel(null);
        p3 = new Panel(null); p4 = new Panel(null);
        p1.setBounds(0,0,w/2,h/2);
        p2.setBounds(0,h/2,w/2,h/2);
        p3.setBounds(w/2,0,w/2,h/2);
        p4.setBounds(w/2,h/2,w/2,h/2);
        p1.setBackground(Color.BLUE);
        p2.setBackground(Color.GREEN);
        p3.setBackground(Color.YELLOW);
        p4.setBackground(Color.MAGENTA);
        add(p1);add(p2);add(p3);add(p4);
        setBounds(x,y,w,h);
        setVisible(true);
    }
}
TestMultiPanel

练习

import java.awt.*;

public class CenterPanel {
  public static void main(String args[]) {
    new MyFrame3(300,300,400,300,Color.BLUE);
  }
}

class MyFrame3 extends Frame{
  private Panel p;
  MyFrame3(int x,int y,int w,int h,Color c){
    super("FrameWithPanel");
    setLayout(null);
    setBounds(x,y,w,h);
    setBackground(c);
    p = new Panel(null); 
    p.setBounds(w/4,h/4,w/2,h/2);
    p.setBackground(Color.YELLOW);
    add(p);
    setVisible(true);
  }
}
CenterPanel

布局管理器

FlowLayout布局管理器

/*    范例名称:FlowLayout 用法举例
 *     源文件名称:TestFlowLayout.java
 *    要  点:
 *        1. 布局管理器的概念和作用
 *       2. FlowLayout的性质及用法
 */

import java.awt.*;

public class TestFlowLayout {
    public static void main(String args[]) {
                 Frame f = new Frame("Flow Layout");
        Button button1 = new Button("Ok");
        Button button2 = new Button("Open");
        Button button3 = new Button("Close");
        f.setLayout(new FlowLayout(FlowLayout.LEFT));
        f.add(button1);
        f.add(button2);
        f.add(button3);
        f.setSize(100,100);
        f.setVisible(true);
    }
}
TestFlowLayout
import java.awt.*;
public class TestFlowLayout2 {
    public static void main(String args[]) {
        Frame f = new Frame("Java Frame");
        FlowLayout l = 
            new FlowLayout(FlowLayout.CENTER, 20, 40);
        f.setLayout(l); 
        f.setLocation(300,400);
        f.setSize(300,200);
        f.setBackground(new Color(204,204,255));
        for(int i = 1; i<=7; i++){
            f.add(new Button("BUTTON"));
        }
        f.setVisible(true);
    }
}
TestFlowLayout2

BorderLayout布局管理器

/*    范例名称:BorderLayout应用举例
 *     源文件名称:TestBorderLayout.java
 *    要  点:FlowLayout布局管理器的性质及用法
 */

import java.awt.*;
public class TestBorderLayout {
    public static void main(String args[]) {
        Frame f;
        f = new Frame("Border Layout");
        Button bn = new Button("BN");
        Button bs = new Button("BS");
        Button bw = new Button("BW");
        Button be = new Button("BE");
        Button bc = new Button("BC");
        
        f.add(bn, "North");
        f.add(bs, "South");
        f.add(bw, "West");
        f.add(be, "East");
        f.add(bc, "Center");
        
        
        // 也可使用下述语句
        /*
        f.add(bn, BorderLayout.NORTH);
        f.add(bs, BorderLayout.SOUTH);
        f.add(bw, BorderLayout.WEST);
        f.add(be, BorderLayout.EAST);
        f.add(bc, BorderLayout.CENTER);
        */
        
        f.setSize(200,200);
        f.setVisible(true);
    }
}
TestBorderLayout

GridLayout布局管理器

/*    范例名称:GridLayout应用举例
 *     源文件名称:TestGridLayout
 *    要  点:GridLayout布局管理器的性质及用法
 */

import java.awt.*;
public class TestGridLayout {
    public static void main(String args[]) {
        Frame f = new Frame("GridLayout Example");
        Button b1 = new Button("b1");
        Button b2 = new Button("b2");
        Button b3 = new Button("b3");
        Button b4 = new Button("b4");
        Button b5 = new Button("b5");
        Button b6 = new Button("b6");
        f.setLayout (new GridLayout(3,2));
        f.add(b1);        
        f.add(b2);
        f.add(b3);        
        f.add(b4);
        f.add(b5);        
        f.add(b6);
        f.pack();          
        f.setVisible(true);
    }
}
TestGridLayout

import java.awt.*;
public class TenButtons {
  public static void main(String args[]) {
    Frame f = new Frame("Java Frame");
    f.setLayout(new GridLayout(2,1)); 
    f.setLocation(300,400);
    f.setSize(300,200);
    f.setBackground(new Color(204,204,255));
    Panel p1 = new Panel(new BorderLayout());
    Panel p2 = new Panel(new BorderLayout());
    Panel p11 = new Panel(new GridLayout(2,1));
    Panel p21 = new Panel(new GridLayout(2,2));
    p1.add(new Button("BUTTON"),BorderLayout.WEST);
    p1.add(new Button("BUTTON"),BorderLayout.EAST);
    p11.add(new Button("BUTTON"));
    p11.add(new Button("BUTTON"));
    p1.add(p11,BorderLayout.CENTER);
    p2.add(new Button("BUTTON"),BorderLayout.WEST);
    p2.add(new Button("BUTTON"),BorderLayout.EAST);
    for(int i =1;i<=4;i++) {p21.add(new Button("BUTTON"));} 
    p2.add(p21,BorderLayout.CENTER);
    f.add(p1);f.add(p2);
    f.setVisible(true);
  }
}
TenButtons

 布局管理器总结

事件监听

/*    范例名称:Java事件处理举例
 *     源文件名称:TestActionEvent.java
 *    要  点:
 *      1. Java事件处理机制
 *        2. 事件源、事件监听器概念及作用
 *        3. 如何在一个现有组件上注册监听器
 */

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");    
    }
}
TestActionEvent
/*    范例名称:Java事件处理举例
 *     源文件名称:TestActionEvent2.java
 *    要  点:
 *      1. 一个事件源组件上可以同时注册多个监听器
 *        2. 一个监听器对象可以同时注册到多个事件源组件上
 *        3. 事件源的信息可以随它所触发的事件自动传递到所有注册过的监听器
 */

import java.awt.*;
import java.awt.event.*;
public class TestActionEvent2 {
    public static void main(String args[]) {
            Frame f = new Frame("Test");
            Button b1 = new Button("Start");
            Button b2 = new Button("Stop");
            Monitor2 bh = new Monitor2();
            b1.addActionListener(bh);       
            b2.addActionListener(bh);
            b2.setActionCommand("game over");
            f.add(b1,"North");       
            f.add(b2,"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());    
    }
}
TestActionEvent2

TextField类

TextField事件监听

import java.awt.*;
import java.awt.event.*;

public class TFActionEvent {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        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("");
    }
}
TFActionEvent
import java.awt.*;
import java.awt.event.*;

public class TFPassword {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new TFFrame2();
    }

}

class TFFrame2 extends Frame
{
    TFFrame2()
    {
        TextField tf = new TextField();
        add(tf);
        tf.addActionListener(new TFActionListener2());
        tf.setEchoChar('*');
        pack();
        setVisible(true);
    }
}

class TFActionListener2 implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        TextField tf = (TextField)e.getSource();
        System.out.println(tf.getText());
        tf.setText("");
    }
}
TFPassword
import java.awt.*;
import java.awt.event.*;

public class TFMath {
    public static void main(String[] args) {
        new TFFrame().launchFrame();
    }
}

class TFFrame extends Frame {
    TextField num1, num2, num3;
    public void launchFrame() {
        num1 = new TextField(10);
        num2 = new TextField(10);
        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));
        }
    }
    
}


//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;
    }
    */
/*    
    TFFrame tf = null;
    
    public MyMonitor(TFFrame tf) {
        this.tf = tf;
    }
    
    public void actionPerformed(ActionEvent e) {
        int n1 = Integer.parseInt(tf.num1.getText());
        int n2 = Integer.parseInt(tf.num2.getText());
        tf.num3.setText("" + (n1+n2));
        
    }
}

*/
TFMath

 内部类

Graphics类

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.red);
        g.fillOval(50, 50, 30, 30);
        g.setColor(Color.green);
        g.fillRect(80,80,40,40);
        g.setColor(c);
    }
    
}
TestPaint

鼠标事件适配器

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();
  }
}
MyMouseAdapter

Window事件

import java.awt.*;
import java.awt.event.*;
public class TestWindowClose {
  public static void main(String args[]) {
    new MyFrame55("MyFrame");
  }
}
class MyFrame55 extends Frame {
  MyFrame55(String s) {
    super(s);
    setLayout(null);
    setBounds(300, 300, 400, 300);
    this.setBackground(new Color(204, 204, 255));
    setVisible(true);
    //this.addWindowListener(new MyWindowMonitor());
    
    this.addWindowListener(
    new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        setVisible(false);
        System.exit(-1);
      }
    });
    
  }
  /*
  class MyWindowMonitor extends WindowAdapter {
      public void windowClosing(WindowEvent e) {
          setVisible(false);
          System.exit(0);
      }
  }
  */
}
TestWindowClose
/*    范例名称:匿名类在事件处理中的使用
 *     源文件名称:TestAnonymous2.java
 *    要  点:
 *        1. 匿名类只能是内部类
 *        2. 匿名类的两种创建方式----既可以继承父类、也可以单重实现接口
 */

import java.awt.*;
import java.awt.event.*;

public class TestAnonymous2 {
    Frame f = new Frame("Test");
    TextField tf = new TextField(10);
    Button b1 = new Button("Start");
    
    public TestAnonymous2(){
        f.add(b1,"North");
        f.add(tf,"South");
        
        b1.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 TestAnonymous2();
    }
}
TestAnonymous2

练习

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(200, 200);
        setLocation(300,300);
        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");
            }
        }
    }
}
TestKey

 

posted on 2015-09-08 00:01  gimin  阅读(169)  评论(0)    收藏  举报