利用Java的事件驱动程序做的一些习题(一)

题目

**16.6 (两个消息交替出现)编写一个程序,当点击鼠标时,面板上交替显示两个消息“Java is fun”和“Java is powerful”。

效果

在这里插入图片描述

#代码

package Test;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


public class Exercise16_6 extends JFrame {
    public Exercise16_6(){
        ChangeMessage cm=new ChangeMessage();
        add(cm);
        }

    public static void main(String[] args) {
        Exercise16_6 frame=new Exercise16_6();
        frame.setTitle("交替显示信息");
        frame.setSize(400,200);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }


        static class ChangeMessage extends JPanel{
        private String message1="java is fun";
        private String message2="java is powerful";
        private static int i=0;

        public   ChangeMessage(){
        addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                i++;
                repaint();
            }

            @Override
            public void mousePressed(MouseEvent e) {

            }

            @Override
            public void mouseReleased(MouseEvent e) {

            }

            @Override
            public void mouseEntered(MouseEvent e) {

            }

            @Override
            public void mouseExited(MouseEvent e) {

            }
        });
    }

    protected void paintComponent(Graphics g) {
        super.paintComponents(g);
            if(i%2==0){
                g.drawString(message1,getWidth()/2,getHeight()/2);
            }
            else{
                g.drawString(message2,getWidth()/2,getHeight()/2);
            }
        }
    }
}

思路解析

这里用到了鼠标监听器——addMouseListener

值得一提的是,因为监听器只关心鼠标的操作,所以采用的是匿名内部类监听器扩展MouseListener,而MouseListener是需要实现所有的处理器的,即使监听器并不关心其他时间,也必须重写所有处理器。

 public   ChangeMessage(){
        addMouseListener(new MouseListener() {
        //即使监听器并不关心其他时间,也必须重写所有处理器。
            @Override
            public void mouseClicked(MouseEvent e) {
                i++;
                repaint();
            }

            @Override
            public void mousePressed(MouseEvent e) {

            }

            @Override
            public void mouseReleased(MouseEvent e) {

            }

            @Override
            public void mouseEntered(MouseEvent e) {

            }

            @Override
            public void mouseExited(MouseEvent e) {

            }
        });
    }

MouseMotionListener接口和MouseListener接口所覆盖的方法

MouseMotionListenerMouseListener
鼠标拖动鼠标按下
鼠标移动鼠标释放
鼠标点击
鼠标输入
鼠标退出

因为题目里面要求的是鼠标点击,所以选择扩展MouseListener类

在鼠标点击方法——mouseClicked里面添加内容,每次点击使得静态变量i自增一次,然后调用repaint()方法。

repaint()方法会让JVM调用paintComponent方法

paintComponent方法的实现

 protected void paintComponent(Graphics g) {
        super.paintComponent(g);
            if(i%2==0){
                g.drawString(message1,getWidth()/2,getHeight()/2);
            }
            else{
                g.drawString(message2,getWidth()/2,getHeight()/2);
            }
        }

因为paintComponent方法写在内部类里面,所以是共享私有成员变量的,每次点击,i自增,paintComponent方法利用取余的方式,自动切换所绘制的字符串。

因为希望在屏幕上绘制字符串,所以内部类继承了JPanel

 static class ChangeMessage extends JPanel{}.....

完成以上工作后,在主类里面对这个内部类进行实例化,增加到frame里面即可。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值