Java基础---AWT

流式布局FlowLayout

package net.zyz;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

public class TestFlowLayout {

    public static void main(String[] args) {
        Frame frame=new Frame("Flow Layout");
        //设置窗口的布局方式为FlowLayout,元素在窗口中左对齐,元素水平间距为10,垂直间距为20
        frame.setLayout(new FlowLayout(FlowLayout.LEFT,10,20));
        for(int i=1;i<=10;i++){
            frame.add(new Button("按纽"+i));
        }
        frame.pack();
        frame.setVisible(true);
    }

}

边界布局BorderLayout

package net.zyz;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;

public class TestBorderLayout {

    public static void main(String[] args) {
        Frame frame=new Frame("Border Layout");
        //边界布局是frame默认的布局方式
        Button button1=new Button("东");
        frame.add(button1, BorderLayout.EAST);

        Button button2=new Button("西");
        frame.add(button2, BorderLayout.WEST);

        Button button3=new Button("南");
        frame.add(button3, BorderLayout.SOUTH);

        Button button4=new Button("北");
        frame.add(button4, BorderLayout.NORTH);

        Button button5=new Button("中");
        frame.add(button5, BorderLayout.CENTER);

        frame.pack();
        frame.setVisible(true);
    }

}

表格布局GridLayout

package net.zyz;

import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;

public class TestGridLayout {

    public static void main(String[] args) {
        Frame frame=new Frame("Grid Layout");
        //frame默认的布局为BorderLayout
        frame.setLayout(new GridLayout(2, 3));
        for(int i=1;i<=5;i++){
            frame.add(new Button("按纽"+i));
        }
        //setSize只指定窗口的大小,位置在原点(0,0)
        //setBound既可指定位置,又可指定大小
//        frame.setSize(300,200);
        //pack会将窗口中的组件正好包裹起来,即大小自适应
        frame.pack();
        frame.setVisible(true);
    }

}

综合布局

package net.zyz;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;

public class TestMutiLayout {

    public static void main(String[] args) {
        Frame frame=new Frame("MutiLayout");
        //窗口分成2行1列,分上下两个panel
        frame.setLayout(new GridLayout(2, 1));

        //第1个panel采用BorderLayout
        Panel p1=new Panel();
        p1.setLayout(new BorderLayout());
        Button b11=new Button("ButtonWest");
        Button b12=new Button("ButtonEast");
        //CENTER部分再使用panel并采用GridLayout
        Panel p11=new Panel();
        p11.setLayout(new GridLayout(2, 1));
        Button b13=new Button("ButtonUp");
        Button b14=new Button("ButtonDown");
        p11.add(b13);
        p11.add(b14);
        p1.add(b11, BorderLayout.EAST);
        p1.add(b12, BorderLayout.WEST);
        p1.add(p11, BorderLayout.CENTER);

        //第2个panel采用BorderLayout
        Panel p2=new Panel();
        p2.setLayout(new BorderLayout());
        Button b21=new Button("ButtonWest");
        Button b22=new Button("ButtonEast");
        //CENTER部分再使用panel并采用GridLayout
        Panel p21=new Panel();
        p21.setLayout(new GridLayout(2, 2));
        for(int i=1;i<=4;i++){
            p21.add(new Button("Button"));
        }
        p2.add(b21, BorderLayout.EAST);
        p2.add(b22, BorderLayout.WEST);
        p2.add(p21, BorderLayout.CENTER);

        frame.add(p1);
        frame.add(p2);
        frame.setSize(300,200);;
        frame.setVisible(true);
    }

}

绘图Graphics

package net.zyz;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;

public class TestGraphics {

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

}
 class FrameDraw extends Frame{
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    public FrameDraw() {
        setSize(400,300);
        setVisible(true);
    }
    @Override
    /**
     * Object->Component->Container->Window->Frame
     * paint是Container类的方法,在继承Frame类中要重写,重写后系统就会自动调用
     */
    public void paint(Graphics g) {
        Color color=g.getColor();
        g.setColor(Color.RED);
        g.drawOval(50, 50, 200, 150);
        g.setColor(new Color(0, 255, 0));
        g.fillRect(100, 100, 200, 50);
        g.setColor(color);
    }
}

动作事件监听java.awt.event.ActionListener

Button

package net.zyz;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestActionListener {

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

}

class Frame2 extends Frame {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    public Frame2() {
        super("Event Listener");
        Button button1 = new Button("button");
        Button button2 = new Button("button");
        button1.setActionCommand("button1");
        button2.setActionCommand("button2");
        //button1和button2加入同一个监听器,如何区分?
        button1.addActionListener(new monitor());
        button2.addActionListener(new monitor());
        add(button1, BorderLayout.NORTH);
        add(button2, BorderLayout.SOUTH);
        pack();
        setVisible(true);
    }
}

class monitor implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        Button button=(Button)e.getSource();
        //首先要得到事件源对象,因getSource()返回的是Object,需强制转换为Button
        String actionCommand=button.getActionCommand();
        /**
         * Button的getLabel()方法得到是按纽上的文字,有可能两个按纽的文本会一样,如本例
         * Button的getName()得到的是按纽的name,这个name值是由系统命名的,第1个Button的name是button0
         * 最好使用getActionCommand()方法进行区分处理
         */
        if(actionCommand.equals("button1")){
            System.out.println("你按下了button1按纽");
        }else if(actionCommand.equals("button2")){
            System.out.println("你按下了button2按纽");
        }
    }
}

TextField

package net.zyz;

import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestTextField {

    public static void main(String[] args) {
        new TFFrame();
    }
}
class TFFrame extends Frame{
    /**
     *
     */
    private static final long serialVersionUID = 1L;

    public TFFrame() {
        TextField txt1=new TextField(10);
        //对于Button、TextField等标准组件,一般都采用ActionEvent
        txt1.addActionListener(new monitorTF());
        add(txt1);
        pack();
        setVisible(true);
    }
}
class monitorTF implements ActionListener{
    @Override
    /**
     * 对于按纽来说默认的动作事件是单击,文本框默认事件的是按回车键,
     * 这些事件执行时,系统回自动调用actionPerformed方法
     * 所以需要在监听器里要重写该方法,ActionListener接口里也只有这一个方法
     */
    public void actionPerformed(ActionEvent e) {
        TextField tf1=(TextField)(e.getSource());
        System.out.println(tf1.getText());
        tf1.setText("");
    }
}

Window事件监听WindowListener

package net.zyz;

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestWindowClose {

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

class FrameWindowCloseTest extends Frame {
    private static final long serialVersionUID = 1L;

    public FrameWindowCloseTest() {
        setSize(300, 200);
        setVisible(true);
        /*
         * addWindowListener方法的参数为继承了WindowAdapter的匿名类
         * 该匿名类直接写在方法的内部
         * 一般情况下很少使用,只有代码简单且无需变动时才临时使用,推荐使用内部类
         */
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                setVisible(false);
                System.exit(0);
            }
        });

        /*
         * addWindowListener()方法的参数为WindowListener对象
         * 而WindowListener是一个接口,里面有6、7个类似windowClosing()的方法
         * 如果要来实现接口的话,则需要实现接口里的每一个方法
         * jdk提供了实现WinowListener接口的抽象类WindowAdapter,
         * 其实WindowApdater类中实现的方法并无实际代码
         * 对于类中的方法,子类是不需要全都实现。本例中只要重写windowClosing()方法即可。
         * monitor extends WindowAdapter implements WindowListener
         * WindowAdapter只是一个中间件,过渡一下
         */
    }
}

鼠标事件监听器MouseListener

package net.zyz;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;

public class TestMouseListener {

    public static void main(String[] args) {
        new FramePoints();
    }
}
class FramePoints extends Frame{

    private static final long serialVersionUID = 1L;
    ArrayList<Point> points;

    public FramePoints() {
        points=new ArrayList<Point>();
        this.addMouseListener(new MonitorPoint());
        this.addWindowListener(new WindowClose(this));
        setSize(500,400);
        setVisible(true);
    }

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.GREEN);
        Iterator<Point> iterator=points.iterator();
        while (iterator.hasNext()) {
            Point point = (Point) iterator.next();
            g.fillOval(point.x, point.y, 10, 10);
        }
    }

    //监听鼠标事件:MouseAdapter implements MouseListener
    class MonitorPoint extends MouseAdapter{
        @Override
        public void mousePressed(MouseEvent e) {
            FramePoints f=(FramePoints)e.getSource();
            points.add(new Point(e.getX(), e.getY()));
            f.repaint();
        }
    }

    //监听窗口事件:WindowAdapter implements WindowListener
//    class MonitorWindow extends WindowAdapter{
//        public void windowClosing(WindowEvent e) {
//            setVisible(false);
//            System.exit(0);
//        }
//    }
}

按键事件监听器KeyListener

package net.zyz;

import java.awt.Frame;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestKey {

    public static void main(String[] args) {
        new FrameKey().lanch();
    }
}

class FrameKey extends Frame {
    private static final long serialVersionUID = 1L;

    void lanch() {
        setSize(300, 200);
        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                int keyCode = e.getKeyCode();
                /**
                 * getKeyCode()方法得到是按键的虚拟键码,
                 * 如按A键无论大小写都是65(美式键盘布局),而且跟键盘布局也有关。
                 * 如果按组合键的话,会激活多个keyPressed事件,
                 * 如shift+A组合键getKeyCode()方法就会得到两个键值,但getKeyChar()方法只会得到一个字符(‘a‘)
                 * 所以keyPressed事件最好和getKeyCode()方法结合使用
                 * 虚拟键码 用于报告按下了键盘上的哪个键,而不是一次或多次键击组合生成的字符(如 "A" 是由 shift + "a" 生成的)。
                 * 例如,按下 Shift 键会生成 keyCode 为 VK_SHIFT 的 KEY_PRESSED 事件,
                 * 而按下 ‘a‘ 键将生成 keyCode 为 VK_A 的 KEY_PRESSED 事件。
                 * 释放 ‘a‘ 键后,会激发 keyCode 为 VK_A 的 KEY_RELEASED 事件。
                 * 另外,还会生成一个 keyChar 值为 ‘A‘ 的 KEY_TYPED 事件。
                 */
                System.out.println(keyCode);
                System.out.println(e.getKeyChar());
                switch (keyCode) {
                case KeyEvent.VK_UP:
                    System.out.println("up");
                    break;
                case KeyEvent.VK_DOWN:
                    System.out.println("down");
                    break;
                case KeyEvent.VK_LEFT:
                    System.out.println("left");
                    break;
                case KeyEvent.VK_RIGHT:
                    System.out.println("right");
                    break;
                default:
                    break;
                }
            }
        });
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                setVisible(false);
                System.exit(0);
            }
        });
        setVisible(true);
    }
}
时间: 2024-08-12 01:16:13

Java基础---AWT的相关文章

java基础问题总结

1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象. 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派生类可以从它的基类那里继承方法和实例变量,并

第1天:了解Java基础知识

Java的优势 1. 简单 不像C或者C++语言,Java中省去了对指针的操作.但是,Java中并没有省去指针,代替指针的是一种新的变量--引用,引用也是保存一个对象的内存地址. 2.方便 Java虚拟机自带垃圾回收器,能够自动回收内存资源.而C和C++语言,需要开发人员手动进行内存资源回收. 3.安全 不支持指针操作 4.平台无关性 Java语言是跨平台的,一次编译,到处运行. 而且,不同平台,C语言中数据类型所占的位数是不同的,而Java语言中,数据类型所占的位数是固定的. 5.面向对象 J

java基础之 Advanced Class Design

 java基础之 Advanced Class Design Abstract Classes In many programming situations, you want to specify an abstraction without specifying implementation-level details. In such cases, you can use either abstract classes or interfaces. Abstract classes are

Java基础常见英语词汇

(转自http://www.jianshu.com/p/2743fe834166) Java基础常见英语词汇(共70个) ['?bd?ekt] ['?:rientid]导向的 ['pr??ɡr?m??]编程OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程 [d?'vel?pm?nt][k?t]工具箱 ['v??tj??l]虚拟的JDK:Java development kit, java开发工具包 JVM:java

java基础8:GUI

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Java基础面试题集(一)

Java基础面试题 一.面向对象编程(OOP) 7 二.常见的Java问题 7 2.1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 7 2.2.JDK和JRE的区别是什么? 8 2.4.是否可以在static环境中访问非static变量? 8 2.5.Java支持的数据类型有哪些?什么是自动拆装箱? 8 2.6.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思? 8 2.7.Java中,什么是构造函数?什么是构造函数重载?什么是

Java基础九--抽象类

Java基础九--抽象类 一.抽象类介绍 /*抽象类:抽象:笼统,模糊,看不懂!不具体. 特点:1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰. 抽象方法必须定义在抽象类中.该类必须也被abstract修饰.2,抽象类不可以被实例化.为什么?因为调用抽象方法没意义.3,抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化. 否则,这个子类还是抽象类. 1,抽象类中有构造函数吗? 有,用于给子类对象进行初始化. 2,抽象类可以不定义抽象方法吗? 可以的. 但是很

JAVA基础知识点总结(全集)

1.JAVA简介 1.1java体系结构:j2se,javaweb,j2ee 1.2java特点:平台无关(虚拟机),垃圾回收(使得java更加稳定) 1.3 JDK与JRE,JDK:java开发环境,JRE:java运行环境 1.4第一个java程序:HelloWorld,java的入口是main(public static void main(String[] args)) 1.5java程序的开发步骤:.java编译(javac)成.class运行(java).class文件 2.基本数据

万能的林萧说:一篇文章教会你,如何做到简历中要求的“要有扎实的Java基础”。

来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来. 一日,LZ在群里发话,"招人啦." 然某群友曰,"群主,俺想去." LZ回之,"你年几何?" 群友曰,"两年也." LZ憾言之,"惜了,三至五为佳.然如汝有扎实之基础,且附一技之长,倒也并非不可呀." 群友惑,问之,"何为一技之长?" LZ抚须答曰,"皆可,吾之一技即为写." 群友又问之,"