zoukankan      html  css  js  c++  java
  • day06

    javaDay06总结

    1、像素:计算机在屏幕上显示的内容都是由屏幕上的每个像素组成 eg.显示器分辨率800600,表示每一行有800个点,有600行,整个屏幕共有480000个像素*
    2、绘图原理:1)paint(Graphics g)绘制组件外观 2)repaint()刷新组件外观
    当组件第一次在屏幕上显示的时候,程序会自动调用paint()方法来绘制组件
    以下情况paint()会被调用:1)窗口最大化/最小化 2)窗口大小发生变化 3)repaint函数被调用
    Graphics类:可理解为一支画笔,提供多种绘制图形的方法 eg.画直线、画矩形、画图片

    package com.mys;
    import java.awt.*;
    import javax.swing.*;
    
    public class Demo1 extends JFrame{
        MyPanel mp=null;
        public static void main(String []args){
            Demo1 demo1=new Demo1();
        }
        //构造函数
        public Demo1(){
            mp=new MyPanel();
            this.add(mp);
            this.setSize(300,400);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
    }
    //定义一个MyPanel(用于绘图和显示绘图的区域)
    class MyPanel extends JPanel{
        //覆盖JPanel的paint方法,Graphic绘图的重要类,可理解为一支画笔
        public void paint(Graphics g){
            //调用父类函数进行初始化
            super.paint(g);
            //填充矩形
            //g.fillRect(0,0 ,300 ,400 );
            //画圆
            //g.drawOval(20,20,20,20);
            //设置颜色
            //g.setColor(Color.CYAN);
            //填充矩形
            //g.fill3DRect(20,20,40,60,true);
            //在面板上画图片
            //getDefaultToolkit获取默认工具包;getImage返回从指定文件获取像素数据的图像
            Image im=Toolkit.getDefaultToolkit().getImage("src/cn/mys/qq.jpg");
            g.drawImage(im,20,20,200,150,this);//this代表JPanel
            //画字
            //g.setFont(new Font("隶书", Font.BOLD,20 ));
            //g.drawString("mys",40 ,60 );
            //画弧线
            //g.drawArc(40,60 ,100 ,200 ,400 ,300 );
        }
    }
    

    3、Java事件处理机制
    初步介绍:当事件发生时,产生事件的对象(事件源)信息传递给事件的监听者处理的一直种方式,信息即事件的对象这里写图片描述
    一个类实现监听的步骤:1)实现相应的接口【eg.Key Listener】2)把接口处理的方法根据需要重写 3)事件源注册监听 4)事件传递靠事件对象

    import java.awt.*;
    import java.awt.event.*;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    
    public class Demo2 extends JFrame implements ActionListener {
        //定义组件
        JButton jb1,jb2;
        JPanel jp;
        public static void main(String []args){
            Demo2 demo2=new Demo2();
        }
        public Demo2(){
            //创建组件
            jb1=new JButton("黑色");
            jb2=new JButton("红色");
            jp=new JPanel();
            jp.setBackground(Color.BLACK);//设置背景颜色
    
            Cat cat=new Cat();
    
            //注册监听
            jb1.addActionListener(this);//事件源对象jb1 事件监听对象this
            jb1.addActionListener(cat);//事件源对象jb1 事件监听对象cat
            jb2.addActionListener(this);
            //指定anction命令
            jb1.setActionCommand("黑色");
            jb2.setActionCommand("红色");
    
            this.add(jb1,BorderLayout.NORTH);
            this.add(jb2,BorderLayout.SOUTH);
            this.add(jp,BorderLayout.CENTER);
    
            this.setSize(400,300);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
        //对事件处理的方法 actionPerformed
        @Override
        public void actionPerformed(ActionEvent e) {//ActionEvent e 事件的对象
            //判断是那个按钮被点击
            if(e.getActionCommand().equals("黑色")){
                System.out.println("黑色被按下");
                jp.setBackground(Color.BLACK);//设置背景颜色为黑色
            }else if(e.getActionCommand().equals("红色")){
                System.out.println("红色被按下");
                jp.setBackground(Color.RED);//设置背景颜色为红色
            }else{
                System.out.println("不知道");
            }
        }
    }
    //任何一个类,只要其实现了相应的接口,就可以去监听某个事件源
    class Cat implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            //判断是那个按钮被点击
            if(e.getActionCommand().equals("黑色")){
                System.out.println("猫猫知道黑色被按下");
            }else if(e.getActionCommand().equals("红色")){
                System.out.println("猫猫知道红色被按下");//为什么猫猫不知道红色被按下???
            }else{
                System.out.println("不知道");
            }
        }
    }
    

    深入理解:
    1)事件源:一个产生或触发的事件对象,当这个事件源对象的某个状态发生某种变化时,就会产生某种类型的事件(一个事件源可能会生成多个不同类型的事件
    2)事件:承载事件源状态改变信息的载体,or事件源向事件监听者传输事件状态信息的载体,查阅jdk文档:常见的事件类AtionEvent、AdjustmentEvent、ComponentEvent、ContainerEvent、FocusEvent、ItemEvent、KeyEvent、MouseEvent、TextEvent、WindowEvent
    3)事件监听者:一个类,实现某个事件监听器接口,作为事件监听者对接收到的事件进行处理,不同的事件监听器接口可以监听不同的事件,一个类可以实现一个事件监听器接口,也可以实现多个事件监听器接口

    /*
    功能:一个事件源可能会生成多个不同类型的事件,
    一个类可以实现一个事件监听器接口,也可以实现多个事件监听器接口
     */
    package com.mys;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class Demo4 extends JFrame{
        //定义组件
        MyPanel2 mp2;
        public static void main(String []args){
            Demo4 demo4=new Demo4();
        }
        public Demo4(){
            mp2=new MyPanel2();
            this.add(mp2);
            //注册监听
            this.addMouseListener(mp2);
            this.addKeyListener(mp2);
            this.addMouseMotionListener(mp2);
    
            this.setSize(300,400);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
    }
    class MyPanel2 extends JPanel implements MouseListener,KeyListener,MouseMotionListener{
        public void paint(Graphics g){
            super.paint(g);
            g.fillOval(10,10 ,10 ,10 );
        }
        //鼠标点击
        @Override
        public void mouseClicked(MouseEvent e) {
            System.out.println("鼠标点击:x="+e.getX()+" y="+e.getY());
        }
        //鼠标按下
        @Override
        public void mousePressed(MouseEvent e) {
            System.out.println("鼠标按下");
        }
        //释放鼠标
        @Override
        public void mouseReleased(MouseEvent e) {
            System.out.println("释放鼠标");
        }
        //鼠标移动到MyPanel
        @Override
        public void mouseEntered(MouseEvent e) {
            System.out.println("鼠标移动到MyPanel");
        }
        //鼠标离开MyPanel
        @Override
        public void mouseExited(MouseEvent e) {
            System.out.println("鼠标离开MyPanel");
        }
        //键值
        @Override
        public void keyTyped(KeyEvent e) {
            System.out.println("键值:"+e.getKeyChar());
        }
        //键按下
        @Override
        public void keyPressed(KeyEvent e) {
            System.out.println("键按下:"+e.getKeyChar());
        }
        //键释放
        @Override
        public void keyReleased(KeyEvent e) {
            System.out.println("键释放");
        }
        //鼠标拖拽
        @Override
        public void mouseDragged(MouseEvent e) {
            System.out.println("鼠标拖拽");
        }
        //鼠标移动
        @Override
        public void mouseMoved(MouseEvent e) {
            System.out.println("鼠标移动,当前位置:x="+e.getX()+" y="+e.getY());
        }
    }
    

    小结

    1.Java采用委托机制处理事件
    2.Java中的事件是分类的,如窗体事件、鼠标事件
    3.Java一个类要监听某个事件,则必须实现相应的事件监听接口
    4.事件监听接口有多种,要根据不同的情况实现不同的接口
    5.实现监听接口的类中需要重写处理函数
    6.在事件源中需要注册事件监听类,否则事件监听类接收不到事件源发生的事件

  • 相关阅读:
    投影变换 到 uv坐标 xy/w 齐次坐标
    GdiPlus[19]: IGPPathGradientBrush 之 SetCenterPoint
    GdiPlus[21]: IGPPathGradientBrush 之 InterpolationColors
    GdiPlus[24]: IGPPrivateFontCollection: 分别从文件和内存加载字体
    GdiPlus[23]: IGPFontFamily
    GdiPlus[25]: IGPInstalledFontCollection: 获取已安装的字体列表
    GdiPlus[20]: IGPPathGradientBrush 之 SetFocusScales
    GdiPlus[22]: IGPFont
    可爱的 CreateMessageDialog
    GdiPlus[18]: IGPPathGradientBrush 之 CenterColor、SurroundColors
  • 原文地址:https://www.cnblogs.com/xq-mys/p/9350183.html
Copyright © 2011-2022 走看看