zoukankan      html  css  js  c++  java
  • GUI常用方法和示例


    Frame :

        Frame : 创建一个框
           1 Frame f = new Frame("这是框的标题");//创建一个框 标题是这是框的标题
           //默认调用paint(Graphics g)方法  需要覆写

           2 或者写个类 继承这个Frame类 也行 如 ;
                public class GUI extends Frame{
                    public static void main(String[] args){
                        GUI a = new GUI();//也是创建一个框
                        //因为实例化的时候调用GUI的无参构造而无参构造里面默认第一行有个super(),调用父类的无参构造,就会创建一个Frame框
                    }
                }

    setLocation :

        setLocation() : //设置框的位置 以屏幕左上角(也就是屏幕原点)为标准
            f.setLocation(100,100);//设置框的位置 以屏幕左上角为标准  (x,y)

    setSize :

        setSize() : //设置框的大小
             f.setSize(200,200);//宽和高 (w,h)

    setBackground :

        setBackground() : //设置框的背景颜色
           1 f.setBackground(Color.blue);//设置框的背景颜色为蓝色
           2 f.setBackground(new Color(0,0,102));//RGB:Red,Green,Blue->三原色

    setResizable :

        setResizable() : //设置框的大小是否可以被改变 就是是否可以拉长什么的
            f.setResizable(false);//boolean型 true/false

    setVisible :
        
        setVisible() : //设置框是否可见
            f.setVisible(true);//不写默认是false,一般都要设置 要么你创建框干嘛

    setBounds :
        
        setBounds() : //同时设置位置和宽高 x,y,w,h
            f.setBounds(444,444,222,222);//同时设置位置和宽高

    Panel :
        
        Panel默认布局管理器是 FlowLayout 浮动布局

       1 Panel p = new Panel();//创建小控件
       2 Panel p = new Panel(null);//小控件里面可以直接设置布局
       3 Panel p = new Panel(new FlowLayout(FlowLayout.LEFT/RIGHT/CENTER));
            // LEFT 左  向左浮动
            // RIGHT 右 向右浮动
            // CENTER 中 中间浮动
            p.setBounds(50,50,100,100);//设置小部件的x,y,w,h 注意 !这个设置位置 是以框的左上角(原点),为标准 就是f
            p.setBackground(new Color(200,200,255));//设置小控件的背景颜色
            f.add(p);//就把小空间添加到Frame框中了

    setLayout :

        setLayout() : //设置布局管理器
            有三种布局管理器 :
                1 FlowLayout(); //Panel默认的
                2 BorderLayout(); //Frame默认的
                3 GridLayout(); //都能用的

      FlowLayout :

        1 Panel默认的布局管理器  但是指定了也可以用BorderLayout
            Panel p = new Panel(new FlowLayout(FlowLayout.LEFT/RIGHT/CENTER));
            Panel p = new Panl(new BorderLayout(BorderLayout.EAST/WEST/NORTH/SOUTH/CENTER));
            // LEFT 左  向左浮动
            // RIGHT 右 向右浮动
            // CENTER 中 中间浮动

      BorderLayout :

        2 Frame默认的布局管理器 但是指定了也可以用FlowLayout
          1  Frame f = new Frame(BorderLayout.EAST/WEST/NORTH/SOUTH/CENTER);
          2  FlowLayout fl = new FlowLayout(FlowLayout.CENTER,20,40);//设置布局方式,水平间距,垂直间距
            f.setLayout(fl);
            // 东西向南北缩放
            // 南北向东西缩放
            // 中向四周缩放
            // EAST 东
            // WEST 西
            // NORTH 北
            // SOUTH 南
            // CENTER 中
      GridLayout :

        3 Frame和Panel都有的布局管理器
            GridLayout();//网格布局管理器
            f.setLayout(new GridLayout(2,2));//两行两列Frame的
            p.set(new GridLayout(2,2));//Panel的

    Button :

        Button b1 = new Button("按钮");//创建按钮  后面括号是按钮的名字
        把按钮添加到Frame中,并通过常量(public static final XXX(必须大写))指定他们的位置  有两种 :
            1 f.add(b1, BorderLayout.EAST/WEST/NORTH/SOUTH/CENTER);//东(右),西(左),北(上),南(下),中
            2 f.add(b1,"East/West/North/South/Center");//东(右),西(左),北(上),南(下),中

    pack :

        pack() : //是否打包,把frame里面所有的元素打包,然后根据包裹的大小,把frame撑开,f.setSize(),就失效了
            f.pack();//frame框用里面的元素撑开

    ActionListener :
        
        //创建监听器  :
                1 监听器类必须实现ActionListener接口
                2 必须实现ActionListener接口中的actionPerformed(ActionEvent e)方法

    addActionListener :

        //绑定监听器 :
                addActionListener();//给指定的按钮什么的绑定监听器  触发监听器 会默认调用actionPerformed(ActionEvent e)这个方法
                b.addActionListener(m);//给b按钮绑定监听器  m在后面例子中,

    setActionCommand :

        setActionCommand() : //给监听器绑定说明
            b.setActionCommand("我是第一个按钮");

                如 :  //简单的属性设置 好多属性没设置
    class Monitor implements ActionListener{//自己创建一个监听器类 实现ActionListener接口
        //实现ActionListener接口中的actionPerformed(ActionEvent e)方法
        public void actionPerformed(ActionEvent e){
            System.out.println( "我这个button按了一下" );
            System.out.println( e.getActionCommand() );//获取给监听器添加的说明
        }
    }
    public class GUI{
        public static void main(String[] args){
            Frame f = new Frame("名字");//创建框
            Button b = new Button("按钮");//创建按钮
            Monitor m = new Monitor();//实例化监听器类
            b.addActionListener(m);//绑定监听器 并把对象传进去
            f.add(b);//把按钮添加到框中
            f.setVisible(true);//框可见
        }
    }

    TextField :

        TextField() : 绑定的监听器,由回车触发

        TextField t = new TextField();//创建一个文本框
        TextField t = new TextField(10);//创建一个文本框并且最多只能输入10个
        f.add(t);//把文本框添加到Frame框中
        t.addActionListener(new TFActionListener());//绑定监听器  由回车触发
        t.setEchoChar('*');//密码机制 把输入的文字用*遮蔽
        f.pack();//包裹 有内容撑起Frame框
        setVisible(true);//设置可见

    class TFActionListener implements ActionListener{//创建监听器
        //接收事件对象,////一个类去访问另外一个类里面的的方法里面的局部变量,不可能
        public void actionPerformed(ActionEvent e){
            //获得事件对象的源对象:在一个类里面想访问另一个类里面的事件源对象,getSource()
            TextField tf = (TextField)e.getSource();
            //把事件源传递过来,然后向下转型
            //强制类型转换成TextField对象然后toString()输出
            System.out.println( tf.getText() );//输出文本框的内容
            //然后把内容设为空
            tf.setText("");
        }
    }

    getSource :
            
        getSource() : 获得事件源的对象
            TextField tf = (TextField)e.getSource();//如上面的代码,获得事件源的对象,然后向下转型,就能访问特有的属性

    getText :
        
        t.getText();//获得文本框的内容

    setText :

        t.setText("");//给文本框重新赋值  就一个"" 就是设置为空

    setEchoChar :

        t.setEchoChar('*');//把文本框输入的字用*号代替(只是遮蔽,输出是什么,还是什么,*只是不让直接看到)

    Label :

        Label l = new Label("注意:");//创建一个标注
        f.add(l);//添加到Frame框中

    paint :
        
        paint(Graphics g);//创建Frame框的时候,会默认调用这个方法
        //Graphics:就看做是画笔,把Frame看做是画布
      getColor :
            Color c = g.setColor();//获得画笔原来的颜色
      setColor :
            g.setColor(Color.red);//设置画笔的颜色
            g.setColor(c);//就是洗画笔,把画笔改为原来的颜色
      fillOval :
            g.fillOval(50,55,55,55);//画一个实心椭圆(内切椭圆),位置,宽高
      fillRect :
            g.fillRect(44,44,44,44);//画一个实心的矩形,位置,宽高
      drawOval :
            g.drawOval(22,22,22,22);//画一个空心椭圆(内切椭圆),位置,宽高
      drawRect :
            g.drawRect(22,22,22,22);//画一个空心矩形,位置,宽高

    MouseAdapter :

        f.addMouseListener(new 监听类);//绑定鼠标监听  触发监听,默认调用mousePressed(MouseEvent e)这个方法
        绑定鼠标监听 :
            1 创建监听器类 必须继承MouseAdapter这个抽象类
            2 必须实现(其中一个方法,这里实现的是)mousePressed(MouseEvent e)这个方法
        class Monitor extends MouseAdapter{
        //MouseListener-->MouseAdapter-->Monitor():如果直接实现接口,需要全部实现接口的方法,但还是MouseAdapter对接口的所有方法都进行了空的实现,我们只写去覆写我们需要的方法即可
        //MounseEvent,事件发生的时候,事件源会把时间的相关对象通过监听器发给我们的处理类
        //监视器在对鼠标按下这个事件作出反应
        public void mousePressed(MouseEvent e){

            //拿到事件源对象,谁是事件源,Component,Frame就是事件源,本质是拿到时间源对象的引用
            MyFrame f = (MyFrame)e.getSource();//拿到事件源的引用
            f.addPoint(new Point(e.getX(), e.getY()));//Point是个类 getX(),getY()鼠标的坐标,以这个坐标为原点,花一个点,然后把点添加到Frame框架中
            
            //再去重画这个Frame及其里面的一切元素
            //画布重画机制:前画布需要状态改变才行,大小,显示与否,等等
            //repaint-->update-->paint();强制刷新屏幕,整个重新绘制
            //这里通过repaint调用paint()方法,遍历集合,把每个点都进行强制重画,点一次,就从内存中发送到屏幕中,数据强制刷新一次
            f.repaint();
        }
    }

    WindowAdapter :

        //创建窗口监听器
        f.addWindowListener(new 监听类);//给Frame框绑定窗口监听(就能关闭了)
        创建窗口监听 :
            1 创建监听类必须继承WindowAdapter这个抽象类
            2 必须实现(其中一个方法,这里实现的是)WindowClosing(WindowEvent)方法
            f.addWindowListener(new MyWinMonitor());//绑定窗口监听
            class MyWinMonitor extends WindowAdapter{//创建窗口监听类
            public void windowClosing(WindowEvent e){//覆写方法
                setVisible(false);//
                System.exit(0);//关闭jvm
            }

        //匿名内部类写法 :
        this.addWindowListener(
                    new WindowAdapter(){
                        public void windowClosing(WindowEvent e){
                            setVisible(true);
                            System.exit(0);//关闭jvm
                        }
                    }
                );
        
    KeyAdapter :
            
        //创建键盘监听 :
            1 创建键盘监听类 必须继承KeyAdapter抽象类
            2 必须实现keyPressed(KeyEvent e)方法

            f.addKeyListener(new 监听类);//给frame框绑定键盘监听
        class KeyMonitor extends KeyAdapter{
        public void keyPressed(KeyEvent e){
            int keyCode = e.getKeyCode();//  getKeyCode
            if (keyCode == KeyEvent.VK_UP) {//常量VK_UP这里我只设置了UP键吧,
                System.out.println( "up--------" );
            }
        }
    }
        getKeyCode :
            getKeyCode();//获得按键的对应的整型值
        KeyEvent :
            KeyEvent是个类.里面的常量VK_UP 都有对应的整型int值

  • 相关阅读:
    网站页面布局的实现
    谈谈我对MVC的View层实现的理解
    浅谈.htaccess文件--避免滥用.htaccess文件
    magento新增商品属性以及将属性加入Flat table
    MySQL JOIN | 联结
    Linux常用命令
    Laravel Model查询结果的3种存储格式内存占用对比
    Laravel配置Route调用artisan
    研究微信红包分配算法之Golang版
    解决IDEA提示Untrusted Server's certificate 证书不可用( Server's certificate is not trusted )
  • 原文地址:https://www.cnblogs.com/xrmqbl/p/4814247.html
Copyright © 2011-2022 走看看