zoukankan      html  css  js  c++  java
  • java事件监听机制2

    今天早上的两点收获:
    1、addActionListener(其中的setActionCommand函数就是要对对象进行唯一性的标记,便于消息传来后进行处理。理论上actionlistener可以全部代替其他监听,我是这么认为的,因为其标记的唯一性,但是这样的话会让某些很简单的监听变得复杂,所以一般只对要唯一性判断的监听才用)
    2、消息监听只是对特定的对象进行特定方式的监听,监听的结果是一大堆的事件,所以要判断某个按钮是否被点击还是得要对传来的消息进行具体按钮的判断
     
    另外,绘图是要记得手动进行repaint函数的调用。
    Demo代码:
    /*
     * 实现java事件监听机制
     */
    package com.listener;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.*;
    
    public class Demo9_5 extends JFrame
    {
        //定义组件
        JButton jb1,jb2;
        MyPanel jp1;
        public static void main(String[] args)
        {
            Demo9_5 demo9_5 = new Demo9_5();
            
        }
        public Demo9_5()
        {
            //创建组件    
            jb1 = new JButton("黑色");
            jb2 = new JButton("红色");
            //添加组件
            jp1 = new MyPanel();
            
            jb1.setActionCommand("black");
            jb2.setActionCommand("red");
            
            this.setLayout(new GridLayout(3,1));    //设置布局样式
            this.add(jb1);
            this.add(jp1);
            this.add(jb2);
            
            //注册监听!
            jb1.addActionListener(jp1);
            jb2.addActionListener(jp1);
            
            //显示窗体
            this.setSize(400,300);
            this.setVisible(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
    
    class MyPanel extends JPanel implements ActionListener
    {
        //画出背景颜色
        int c = 0;
        public void paint(Graphics g)
        {
            super.paint(g);
            //获取当前mypanel的宽和高
            int w,h;
            w = this.getWidth();
            h = this.getHeight();
            if(c == 0)
            {
                g.fillRect(0, 0, w, h);
            }
            else if(c == 1)
            {
                g.setColor(Color.red);
                g.fillRect(0, 0, w, h);
            }
        }
    
        @Override
        public void actionPerformed(ActionEvent e)
        {
            // TODO Auto-generated method stub
            if(e.getActionCommand() == "black")
            {
                c = 0;
                repaint();
                System.out.println("BLACK");            
            }
            if(e.getActionCommand() == "red")
            {
                c = 1;
                repaint();
                System.out.println("RED");
            }
        }
    
        
    }


    红黑色背景切换。

  • 相关阅读:
    Linux 字典数组应用
    Linux shell 字符串切割 内置方法
    【Swing/文本组件】定义自动换行的文本域
    【C++语法基础】实验1
    【Swing程序设计/常用面板】
    【标签组件与图标 3.3】
    【2018.2.26算法总结#分治】
    数据结构#课表排序及查询
    数据结构#前序遍历建立二叉树 输出中序遍历
    OJ#1002 又是a+b
  • 原文地址:https://www.cnblogs.com/starwolf/p/3220303.html
Copyright © 2011-2022 走看看