zoukankan      html  css  js  c++  java
  • GUI编程

    AWT
    ➢AWT(Abstract Window Toolkit)包括了很多类和接口,用于Java Application
    的GUI (Grapbics User Interface图形用户界面)编程。
    ➢GUI的各种元素(如: 窗口,按钮,文本框等)由Java类来实现。
    ➢使用AWT所涉 及的类-般在java.awt包及其子包中。
    ➢Container和Component是 AWT中的两个核心类。

     Component & Container
    Java的图形用户界面的最基本组成部分是Component,Component类及其子类的对象
    用来描述以图形化的方式显示在屏幕上并能与用户进行交互的GUI元素,例如,-一个按钮,
    一个标签等。
    ➢一般的Component对 象不能独立地显示出来,必须将”放在"某-的Container对象中才可
      以显示出来。
    ➢Container是Component子类,Container子 类对象可以“容纳”别的Component对象。
    ➢Container对象可使用方法add(..)向其中添加其他Component对象。
    ➢Containter 是Component的子类,因此Containter对象也可以被当作Component对象添
    加到其他Container对象中。
    ➢有 两种常用的Containter:
    Window:其对象表示自由停泊的顶级窗口
    Panel:其对象可作为容纳其它Component对象,但不能独立存在,必须被添加到其
    它Containner中(如Window或Applet)

    package com.shuai01;
    
    import java.awt.*;
    
    public class TestFrameDemo01 {
        public static void main(String[] args) {
            myFrame m1 = new myFrame(100,100,200,200,Color.yellow);
            myFrame m2 = new myFrame(300,100,200,200,Color.green);
            myFrame m3 = new myFrame(100,300,200,200,Color.red);
            myFrame m4 = new myFrame(300,300,200,200,Color.orange);
    
        }
    }
    
    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);
        }
    }

     

    程序1

    package com.shuai01;
    
    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(100,220,100));
            p.setBounds(50,50,400,400);
            p.setBackground(new Color(204,204,255));
            f.add(p);
            f.setVisible(true);
        }
    }

    程序2

    package com.shuai01;
    
    import java.awt.*;
    
    public class TestmultiPanel {
        public static void main(String[] args) {
            MyFrame2 m = new MyFrame2("java frame",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.orange);
            p4.setBackground(Color.cyan);
    
            add(p1);add(p2);add(p3);add(p4);
            setBounds(x,y,w,h);
            setVisible(true);
        }
    }

    布局管理器类:

    ◆Java语言中,提供了布局管理器类的对象可以管理
    ◆管 理Component在Container中的布局,不必直接设置
    Component位置和大小。
    ◆每 个Container都有一个布局管理器对象,当容器需要对某个组件
    进行定位或判断其大小尺寸时,就会调用其对应的布局管理器,调用
    Container的setLayout方法改变其布局管理器对象。
    ◎Awt提供了5种布局管理器类:
    ◆FlowLayaout
    ◆BorderLayout
    ◆GridlLayou
    ◆CardLayout
    ◆GridBagLayout

    1mport java.aut. *:
    public class TestFlowLayout (
    public static void main(String args[]) {
    Frane I。new Frane ("F lou Layout") ;
    Button button1 neu 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) ;

    package com.shuai01;
    
    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,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);
        }
    }

    package com.shuai01;
    
    import java.awt.*;
    
    public class TestBorderLayout {
        public static void main(String[] args) {
            Frame f;
            f = new Frame("GridLayout");
            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.setLayout(new GridLayout(3,4));
    
            f.add(bn);
            f.add(bs);
            f.add(bw);
            f.add(be);
            f.add(bc);
    
            f.pack();
            f.setVisible(true);
        }
    }

    addActionListener​(ActionListener l)
    添加指定的动作侦听器以从此按钮接收动作事件。

    package com.shuai01;
    
    import java.awt.*;
    
    import java.awt.event.*;
    
    public class TestActionEvent2 {
        public static void main(String args[]) {
            Frame f = new Frame("Teat");
            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 relativeinfo 18:
     "+ e.getActionCommand()) ;
    
            }
    }

     

    public void setEchoChar​(char c)
    设置此文本字段的回音字符

     

     持有对方引用

    计算机加法

     代码如下

    package com.shuai01;
    
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class TFmath {
        public static void main(String[] args) {
            TFFrame t1 = new TFFrame();
            t1.setTitle("计算器");
            t1.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 myMonnitor(num1, num2, num3));
            btnEqual.addActionListener(new myMonnitor(this));
            setLayout(new FlowLayout());
            add(num1);
            add(lblPlus);
            add(num2);
            add(btnEqual);
            add(num3);
            pack();
            setVisible(true);
    
    
        }
    }
    
    class myMonnitor implements ActionListener {
        /*
        TextField num1, num2, num3;
    
        public myMonnitor(TextField num1, TextField num2, TextField num3) {
            this.num1 = num1;
            this.num2 = num2;
            this.num3 = num3;
        }
        */
        //持有对方的引用
        TFFrame tf = null;
        public myMonnitor(TFFrame tf) {
            this.tf = tf;
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            int n1 = Integer.parseInt(tf.num1.getText());
            int n2 = Integer.parseInt(tf.num2.getText());
            tf.num3.setText(String.valueOf(n1+n2));
        }
    }

    内部类改进后

    package com.shuai01;
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class TFmathDemo01 {
        public static void main(String[] args) {
    
            new TFFrame().lanuchFrame();
        }
    }
    
    class TFFrame extends Frame {
        TextField num1, num2, num3;
    
        public void lanuchFrame() {
            num1 = new TextField(10);
            num2 = new TextField(10);
            num3 = new TextField(15);
            Label lblplus = new Label("+");
            Button equals = new Button("=");
            equals.addActionListener(new myMonitor());
            setLayout(new FlowLayout());
            add(num1);
            add(lblplus);
            add(num2);
            add(equals);
            add(num3);
            pack();
            setVisible(true);
        }
    
        class myMonitor implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent e) {
                int n1 = Integer.parseInt(num1.getText());
                int n2 = Integer.parseInt(num2.getText());
                num3.setText(" " + (n1 + n2));
    
            }
        }
    }

    package com.shuai01;
    
    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); //恢复画笔颜色
        }
    
    }

    package com.shuai01;
    
    import java.awt.*;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.ArrayList;
    import java.util.Iterator;
    
    public class MyMouseAdapter {
        public static void main(String args[]) {
            new MyFrame("drawing...");
        }
    }
    
    class MyFrame extends Frame {
        ArrayList points = null;
    //    设置Frame结构
        MyFrame(String s) {
            super(s);
            points = new ArrayList();
            setLayout(null);
            setBounds(300,300,400,300);
            setBackground(new Color(204,204,255));
            setVisible(true);
    //        调用鼠标监听器
            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) {
    //        从e中得到信息,点的坐标,并进行重画
            MyFrame f = (MyFrame)e.getSource();
            f.addPoint(new Point(e.getX(),e.getY()));
            f.repaint();
        }
    }

    Window事件

     

     keyEvent

    package com.shuai01;
    
    import java.awt.*;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    
    public class KeyEventDemo {
        public static void main(String[] args) {
             new MYFrame("wode");
    
        }
    }
    class MYFrame extends Frame {
        MYFrame(String s) {
            super(s);
            setBounds(100,200,300,300);
            setBackground(Color.green);
            setVisible(true);
            addKeyListener(new myMonitor());
        }
    
    }
    class myMonitor extends KeyAdapter {
        public void keyPressed​(KeyEvent e) {
            System.out.println("键盘被按下"+e.getKeyCode());
        }
    }
  • 相关阅读:
    Symmetric Order
    Red and Black
    Sticks(递归经典)
    Pascal Library
    cantor的数表
    OJ 调试技巧:VS2010 中 通过设置编译参数定义宏,无需修改源文件重定向标准输入输出
    strcmp
    最短周期串
    字母重排
    codeblocks 单步调试
  • 原文地址:https://www.cnblogs.com/lsswudi/p/11461294.html
Copyright © 2011-2022 走看看