JAVA GUI基础与MouseListener用法

目录
  • 使用MouseListener类作为JFrame的监听
    • 点击窗口右上角关闭,四种关闭方式
  • 使用MouseAdapter类作为JFrame的监听
    • MouseAdapter与MouseListener类中实际都封装了五个鼠标事件

所谓监听器,它一定是与某个GUI部件绑定的,例如我声明了一个JFrame f,我想对他进行鼠标监听,可以使用f.addMouseListener(this);

使用MouseListener类作为JFrame的监听

import java.awt.event.*;
import javax.swing.*;
public class ImplementMouseListener implements MouseListener{	  //注意implement后面的s,注意Listener的拼写,list'e'ner,中间有个‘ten'
       JFrame f;
	public void ImplementMouseListener() {   //这个类的构造方法
    	   f=new JFrame();   //注意JFrame前两个字母都是大写,不然可能产生不好发现的错误
    	   f.addMouseListener(this); //注意括号里面需要加this,虽然不知道意义何在
    	   f.setSize(300,150);
    	   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //有点不清楚什么意思
    	   f.setVisible(true);  //the method show from the type Window is deprecated,意思是show()这个方法以及被弃用了
       }
       public void mousePressed(MouseEvent e) {}
       public void mouseReleased(MouseEvent e) {}
       public void mouseEntered(MouseEvent e) {}
       public void mouseExited(MouseEvent e) {}
       public void mouseClicked(MouseEvent e) {
    	   f.setTitle("点击坐标未"+e.getX()+","+e.getY());   //需要把JFrame声明为这个类的成员对象,而不能在构造方法中再声明,否则这句话无法运行
       }

       //不看主方法,上面就是一个完整的类。主方只不过相当于把运行过程放在了某个类里面显示而已
       public static void main(String []args) {   //static必须在void之前,否则会报错
    	   new ImplementMouseListener();  //不要忘记打小括号
       }
}

注意setTitle方法,将他与构造JFrame时的窗口名字区分开。这个setTitle也是JFrame中的方法,用于设置窗口的名字,我把他卸载了mouseCliked事件中,使得每次点击鼠标后会重新设置窗口名字

注意鼠标事件e,这个鼠标事件e中也包含很多有用的方法

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

所谓close就是指窗口栏右上角的那个叉叉,使用这个命令确定了点那个叉叉会发生什么,这条命令括号内的参数JFrame.EXIT_ON_CLOSE实际上是javax.swing.WindowContants中定义的一个常数3。

点击窗口右上角关闭,四种关闭方式

this.setDefaultCloseOperation(0);// DO_NOTHING_ON_CLOSE,不执行任何操作。
this.setDefaultCloseOperation(1);//HIDE_ON_CLOSE,只隐藏界面,setVisible(false)。
this.setDefaultCloseOperation(2);//DISPOSE_ON_CLOSE,隐藏并释放窗体,dispose(),当最后一个窗口被释放后,则程序也随之运行结束。
this.setDefaultCloseOperation(3);//EXIT_ON_CLOSE,直接关闭应用程序,System.exit(0)。一个main函数对应一整个程序。

使用MouseAdapter类作为JFrame的监听

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

public class ExtendMouseAdapter extends MouseAdapter{  //如果没有引入这个包,可以点击MouseAdapter,会有引入包的提示
      JFrame f;  //MouseAdapeter是一个抽象类,而MouseListener是一个接口(interface)
      public ExtendMouseAdapter() {
    	  f=new JFrame("鼠标监听器测试窗口");
    	  f.setSize(300,150);
    	  f.addMouseListener(this);
    	  f.setVisible(true);
    	  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //JFrame.EXIT_ON_CLOSE是java.swing.WindowConstants中定义的一个常量,相当于3
      }
      public void mouseClicked(MouseEvent e) {   //类的第一个字母总是大写如,MouseEvent,而方法的第一个字母总是小写,如mouseClicked
    	  f.setTitle("单击的位置是"+e.getX()+"  "+e.getY());
      }

      public static void main(String []args) {
    	  new ExtendMouseAdapter();
      }
}

MouseAdapter与MouseListener类中实际都封装了五个鼠标事件

他们的区别在于,后者是一个接口(interface),类继承时要使用implements,并且在继承后也要对这五个方法进行实现(即使是空实现);而前者是一个抽象类,他也继承自MouseListener,并且将五个鼠标事件均搞成了空实现。

注:当一个java工程中含有多个源文件,并且有多源文件与main方法时,点击运行不会报错。

那么怎么确定到底在运行哪个主方法呢?

如图:

点击这个下拉标志,可以看到运行配置(run configurations)

在其中可以进行运行哪个主方法的设置:

不要因此就产生了构造GUI窗口时必须把它写在类的构造方法中的错觉,实际上可以随便写,比如卸载主方法中

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java GUI编程之paint绘制操作示例

    本文实例讲述了java GUI编程之paint绘制操作.分享给大家供大家参考,具体如下: import java.awt.*; public class Testpint { public static void main(String[] args) { // new TFPaint().lunchPaint(); new TFPaint(); } } class TFPaint extends Frame{ /* public void lunchPaint() { this.setBoun

  • java必学必会之GUI编程

    一.事件监听 测试代码一: package cn.javastudy.summary; import java.awt.*; import java.awt.event.*; public class TestTextField { public static void main(String args[]) { new MyFrameTextField(); } } class MyFrameTextField extends Frame { MyFrameTextField() { Text

  • java中addMouseListener()方法的使用

    目录 java addMouseListener()方法使用 其包含五个方法 另外还有几个重要的方法 java鼠标事件监听MOUSEADAPTER 方法摘要 java addMouseListener()方法使用 用于接收组件上"感兴趣"的鼠标事件(按下.释放.单击.进入或离开)的侦听器接口.(要跟踪鼠标移动和鼠标拖动,请使用 MouseMotionListener.) 使用组件的 addMouseListener 方法将从该类所创建的侦听器对象向该组件注册.当按下.释放或单击(按下并

  • Java监听器ActionListener与MouseListener的执行顺序说明

    目录 基本概念 开发环境 源代码 运行结果 小结一下 鼠标监听器和动作监听器区别和联系 1.英文名:MouseListener和ActionListener 2.作用 3.区别 基本概念 监听器(Listener):监听器用于监听web应用中某些对象.信息的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法.常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等. ActionListener:

  • JAVA GUI基础与MouseListener用法

    目录 使用MouseListener类作为JFrame的监听 点击窗口右上角关闭,四种关闭方式 使用MouseAdapter类作为JFrame的监听 MouseAdapter与MouseListener类中实际都封装了五个鼠标事件 所谓监听器,它一定是与某个GUI部件绑定的,例如我声明了一个JFrame f,我想对他进行鼠标监听,可以使用f.addMouseListener(this); 使用MouseListener类作为JFrame的监听 import java.awt.event.*; i

  • Java BigDecimal基础用法详解

    目录 一.BigDecimal概述 二.BigDecimal常用构造函数 2.1.常用构造函数 2.2.使用问题分析 三.BigDecimal常用方法详解 3.1.常用方法 3.2.BigDecimal大小比较 四.BigDecimal格式化 五.BigDecimal常见异常 5.1.除法的时候出现异常 六.BigDecimal总结 6.1.总结 6.2.工具类推荐 一.BigDecimal概述 一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Do

  • IOS Swift基础之switch用法详解

    IOS  Swift基础之switch用法详解 概述 Swift中的switch语句与Java等语言中的switch有很大的相似点,但是也有不同的地方,并且更加灵活. Swift中switch的case语句中不需要添加break Swift中需要考虑所有情况,default是必要的. case分支可以添加多个条件,用,分割 case不局限与常量,可以使使用范围 switch里可以使用元组 switch默认不需要添加break,执行一个case之后就跳出语句,如果想要继续下面的语句可以使用fall

  • java arrayList遍历的四种方法及Java中ArrayList类的用法

    java arrayList遍历的四种方法及Java中ArrayList类的用法 package com.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ArrayListDemo { public static void main(String args[]){ List<String> list = new ArrayList<String

  • Java编程接口回调一般用法代码解析

    接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法.实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调. Java接口回调一般用法:实现接口实际上和继承抽象类类似,只不过继承是在类的层面上操作,接口是在方法和常量集合的层面上操作,接口比抽象类更抽象.更简洁.可以把实现接口看成继承特定的一个或多个方法以及一些常量,关于接口的具体规则这里不赘述. 为什么要使用接口和抽

  • java集合中list的用法代码示例

    List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列. List可以精确的控制每个元素的插入位置,或删除某个位置元素,它的实现类ArrayList底层是由数组实现的. List中有增删改查的方法,我们可以通过例子演示: 我们通过对学生选课,来演示List中对课程增删改查的方法 /** * 课程类 * @author lenovo * */ public class KeCheng { publ

  • java Swing组件setBounds()简单用法实例分析

    本文实例讲述了java Swing组件setBounds()简单用法.分享给大家供大家参考,具体如下: 先看API: public void setBounds(Rectangle r) 移动组件并调整其大小,使其符合新的有界矩形 r.由 r.x 和 r.y 指定组件的新位置,由 r.width 和 r.height 指定组件的新大小 参数: r - 此组件的新的有界矩形 从API来看,该方法的作用相当于setLocation()与 setSize()的总和.在实际使用时,需将容器的layout

  • Java设计模式模板方法模式(Template)用法解析

    这篇文章主要介绍了Java设计模式模板方法模式(Template)用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言: 我们在开发中有很多固定的流程,这些流程有很多步凑是固定的,比如JDBC中获取连接,关闭连接这些流程是固定不变的,变动的只有设置参数,解析结果集这些是根据不同的实体对象"来做调整",针对这种拥有固定算法流程,其中有固定的步凑,存在不固定的步凑的情况下就诞生了模板方法模式. 模板方法模式(Template)定义

  • java sql ResultSet 之getRow()用法说明

    今天学习到sql中的ResultSet,用到了获取总函数,网上百度说是使用getRow()方法,但是一值返回0. 后台调试才发现getRow()并不是获取总行数,而是返回当前指针所在函数,故在不移动指针时一直为0. 附: 1.判断ResultSet行数是否为0: ResultSet表示select语句的查询结果集.ResultSet对象具有指向其当前数据行的指针, 最初,指针被置于第一行记录之前,通过next()方法可以将指针移动到下一行记录. next()方法在ResultSet对象没有一行记

  • java中的Reference类型用法说明

    本文简要总结java中的Reference类型. 最近在研读jdk并发框架,其中AQS是重点,由于我打破砂锅问到底的轻微强迫症,google了AQS作者Doug Lea的论文原文[The java.util.concurrent Synchronizer Framework],有兴趣的同学可以自行下载.其中谈到设计同步框架的核心是选择一个严格意义上的FIFO队列,作为阻塞线程队列并对其进行维护. 对此主要由两种选择,一个是MCS锁,另一个时CLH锁.因为CLH锁比MCS对取消和超时的处理更方便,

随机推荐