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());
        }
    }
  • 相关阅读:
    mac上python3安装HTMLTestRunner
    双目深度估计传统算法流程及OpenCV的编译注意事项
    深度学习梯度反向传播出现Nan值的原因归类
    1394. Find Lucky Integer in an Array
    1399. Count Largest Group
    1200. Minimum Absolute Difference
    999. Available Captures for Rook
    509. Fibonacci Number
    1160. Find Words That Can Be Formed by Characters
    1122. Relative Sort Array
  • 原文地址:https://www.cnblogs.com/lsswudi/p/11461294.html
Copyright © 2011-2022 走看看