Java的基础知识8——图形

1、AWT是Java的比较旧的开发包,而Swing是Java的新的图形开发包。

2、AWT提供了五种布局管理器:FlowLayout、BorderLayout 、GridLayout、GardLayout、GridBagLayout。

3、FlowLayout是Panel类的默认的布局管理器,FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满换行。
FlowLayout默认的对齐方式是居中。

4、BorderLayout是Frame类默认的布局管理器。
BorderLayout将整个容器的布局划分为东西南北中五个区域,组件只能被添加到指定的区域。如果不指定组件的加入部位,则默认加入到CENTER区。

5、GridLayout布局管理器将空间划分为规则的矩形网络,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下。

6、如果语句比较少,逻辑比较简单,不经常变动,则可以使用匿名类。

7、下面是一些简单示例。
(1)显示多个不同背景色的窗口

import java.awt.*;

public class TestGUI {

    public static void main(String[] args) {        
        MyFrame f1 = new MyFrame(400,100,200,200,Color.BLUE);
        MyFrame f2 = new MyFrame(600,100,200,200,Color.CYAN);
        MyFrame f3 = new MyFrame(400,300,200,200,Color.PINK);
        MyFrame f4 = new MyFrame(600,300,200,200,Color.GREEN);
    }
}

class MyFrame extends Frame{
    static int i = 1;
    public MyFrame(int x,int y,int m,int n,Color c){
        super("Frame"+(i++));
        setBounds(x,y,m,n);
        setLayout(null);
        setBackground(c);
        setVisible(true);
    }
}

(2)显示多个不同背景色的Panel

import java.awt.*;

public class TestGUI {

    public static void main(String[] args) {
        FrameAndPanel fap = new FrameAndPanel(350,160,600,400,"Frame$4Panel");
    }
}

class FrameAndPanel extends Frame{
    private Panel p1 = null;
    private Panel p2 = null;
    private Panel p3 = null;
    private Panel p4 = null;

    public FrameAndPanel(int x,int y,int m,int n,String s){
        super(s);
        p1 = new Panel(null);
//null表示Panel不带自己的布局管理器
        p2 = new Panel(null);
        p3 = new Panel(null);
        p4 = new Panel(null);
        this.setBounds(x, y, m, n);
        this.setLayout(null);
        p1.setBounds(0,0,m/2,n/2);
        p2.setBounds(m/2,0,m/2,n/2);
        p3.setBounds(0,n/2,m/2,n/2);
        p4.setBounds(m/2,n/2,m/2,n/2);
        p1.setBackground(Color.BLUE);
        p2.setBackground(Color.PINK);
        p3.setBackground(Color.GREEN);
        p4.setBackground(Color.CYAN);
        this.add(p1);
        this.add(p2);
        this.add(p3);
        this.add(p4);
        this.setVisible(true);
    }
}

(3)不同布局的简单应用

import java.awt.*;

public class TestGUI {

    public static void main(String args[]){
        Frame f = new Frame("MyFrame");
        f.setBounds(350,160,600,400);
        f.setLayout(new GridLayout(2,1));

        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));

        p11.add(new Button("Button3"));
        p11.add(new Button("Button4"));
        p21.add(new Button("Button7"));
        p21.add(new Button("Button8"));
        p21.add(new Button("Button9"));
        p21.add(new Button("Button10"));

        p1.add(new Button("Button1"),BorderLayout.WEST);
        p1.add(new Button("Button2"),BorderLayout.EAST);
        p1.add(p11,BorderLayout.CENTER);
        p2.add(new Button("Button5"),BorderLayout.WEST);
        p2.add(new Button("Button6"),BorderLayout.EAST);
        p2.add(p21,BorderLayout.CENTER);        
        f.add(p1);
        f.add(p2);
        f.setVisible(true);
    }
}

(4)实现A+B=C

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestGUI{

    public static void main(String args[]){
        new MyFrame();
    }
}

class MyFrame extends Frame{
    TextField t1,t2,t3;
    public MyFrame(){
        t1 = new TextField(15);
        t2 = new TextField(15);
        t3 = new TextField(20);
        Button b = new Button("=");
        Label l = new Label("+");
        add(t1);
        add(l);
        add(t2);
        add(b);
        add(t3);
        setLocation(430,200);
        setLayout(new FlowLayout());
        pack();
        b.addActionListener(new Monitor(this));
        //b.addActionListener(new Monitor(t1,t2,t3));
        setVisible(true);
    }
}
/*
class Monitor implements ActionListener{
    TextField t1,t2,t3;

    Monitor(TextField t1,TextField t2,TextField t3){
        this.t1 = t1;
        this.t2 = t2;
        this.t3 = t3;
    }

    public void actionPerformed(ActionEvent e) {
        int num1,num2,num3;
        String num;
        num1 = Integer.parseInt(t1.getText());
        num2 = Integer.parseInt(t2.getText());
        num3 = num1 + num2;
        //num = Integer.toString(num3);
        num = String.valueOf(num3);
        t3.setText(num);
    }
}
*/

class Monitor implements ActionListener{
    MyFrame mf;

    Monitor(MyFrame mf){
        this.mf = mf;
    }

    public void actionPerformed(ActionEvent e) {
        int num1,num2,num3;
        String num;
        num1 = Integer.parseInt(mf.t1.getText());
        num2 = Integer.parseInt(mf.t2.getText());
        num3 = num1 + num2;
        //num = Integer.toString(num3);
        num = String.valueOf(num3);
        mf.t3.setText(num);
        mf.t1.setText("");
        mf.t2.setText("");
    }
}

(5)鼠标事件、窗口事件、键盘事件

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

public class TestPaint {

    public static void main(String[] args) {
        new MyFrame();
    }
}

class MyFrame extends Frame{
    ArrayList points = null;
    public MyFrame(){
        super("MyFrame");
        points = new ArrayList();
        this.setBounds(400,160,500,300);
        this.setBackground(Color.BLUE);
        this.setLayout(null);
        this.setVisible(true);
        this.addMouseListener(new MouseMonitor());
        this.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                setVisible(false);
                System.exit(0);
            }
        }       
        );
        this.addKeyListener(new KeyMonitor());
    }

    public void addPoint(Point p){
        points.add(p);
    }

    public void paint(Graphics g){
        Iterator i = points.iterator();
        Color c = g.getColor();
        g.setColor(Color.YELLOW);
        Point p = null;
        while(i.hasNext()){
            p = (Point)i.next();    
            g.fillOval(p.x,p.y,10,10);
        }
        g.setColor(c);
    }

    class MouseMonitor extends MouseAdapter{
        public void mousePressed(MouseEvent e){
            Point p = new Point(e.getX(),e.getY());
            addPoint(p);
            repaint();
        }
    }
}

class KeyMonitor extends KeyAdapter{
    public void keyPressed(KeyEvent e){
        int keyCode = e.getKeyCode();
        if(keyCode == KeyEvent.VK_UP){
            System.out.println("向上");
        }else if(keyCode == KeyEvent.VK_DOWN){
            System.out.println("向下");
        }else if(keyCode == KeyEvent.VK_LEFT){
            System.out.println("向左");
        }else if(keyCode == KeyEvent.VK_RIGHT){
            System.out.println("向右");
        }else{
            System.out.println("其他");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值