iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解Java如何给按钮添加监视器
  • 515
分享到

详解Java如何给按钮添加监视器

Java按钮添加监视器Java按钮添加监视器 2023-05-14 20:05:53 515人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录给按钮添加监视器第一种:匿名对象第二种:实现类第三种:实现接口第四种:Lambda 表达式第五种:注解总结给按钮添加监视器 最近看了 java 相关方面的内容,正好总结一下,给按

给按钮添加监视器

最近看了 java 相关方面的内容,正好总结一下,给按钮添加监视器的几种方式,当做是加深对知识的理解吧。

直接上代码吧!

第一种:匿名对象

界面代码

package draGon;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class View3 extends JFrame{
	private JButton submit, cancel;
	public View3() {
		this.init();
		this.setLayout(new FlowLayout());
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBounds(300,300,250,100);
		this.setVisible(true);
	}
	
	private void init() {
		submit = new JButton("确定");
		cancel = new JButton("取消");
		Box box = Box.createHorizontalBox();
		box.add(submit);
		box.add(Box.createHorizontalStrut(20));
		box.add(cancel);
		
		submit.addActionListener(new ActionListener() {
			@Override
			public void actionPerfORMed(ActionEvent e) {
				JOptionPane.showMessageDialog(null, "点击了确定按钮", "确定", JOptionPane.INFORMATION_MESSAGE);
			}
		});
		
		cancel.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null, "点击了取消按钮", "取消", JOptionPane.CANCEL_OPTION);
			}
		});
		this.add(box);
	}
}

测试代码

package dragon;public class Test {<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->public static void main(String[] args) {<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->new View3();}}package dragon;

public class Test {
	public static void main(String[] args) {
		new View3();
	}
}

运行截图:

在这里插入图片描述

在这里插入图片描述

说明:比较常见的一种方式,初学Java的朋友一般都会见到这种方法,但是同时这也是很老的一种方式,不能很好的体现Java代码的变化。一般并不推荐使用这种方式,但是作为学习Java语法的例子,还是非常不错的

第二种:实现类

界面代码

package dragon;

import java.awt.FlowLayout;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;

public class View4 extends JFrame{
	private JButton submit, cancel;
	private SubmitListener submitListener;
	private CancelListener cancelListener;
	
	public View4() {
		this.init();
		this.setLayout(new FlowLayout());
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBounds(300,300,250,100);
		this.setVisible(true);
	}
	
	private void init() {
		submit = new JButton("确定");
		cancel = new JButton("取消");
		Box box = Box.createHorizontalBox();
		box.add(submit);
		box.add(Box.createHorizontalStrut(20));
		box.add(cancel);
		
		submitListener = new SubmitListener();
		cancelListener = new CancelListener();
		submit.addActionListener(submitListener);
		cancel.addActionListener(cancelListener);
		this.add(box);
	}
}

实现 ActionListener 接口的类

package dragon;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

public class SubmitListener implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent e) {
		JOptionPane.showMessageDialog(null, "点击了确定按钮", "确定", JOptionPane.INFORMATION_MESSAGE);
	}
}

class CancelListener implements ActionListener {
	@Override
	public void actionPerformed(ActionEvent e) {
		JOptionPane.showMessageDialog(null, "点击了取消按钮", "取消", JOptionPane.CANCEL_OPTION);
	}
	
}

测试代码

package dragon;

public class Test {
	public static void main(String[] args) {
		new View4();
	}
}

运行截图:

在这里插入图片描述

在这里插入图片描述

说明:使用继承 ActionListener 接口的类,作为监视器,是一种很好的方式。

第三种:实现接口

界面代码

package dragon;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class View1 extends JFrame implements ActionListener{
	private JButton submit, cancel;
	public View1() {
		this.init();
		this.setLayout(new FlowLayout());
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBounds(300,300,250,100);
		this.setVisible(true);
	}
	
	private void init() {
		submit = new JButton("确定");
		cancel = new JButton("取消");
		Box box = Box.createHorizontalBox();
		box.add(submit);
		box.add(Box.createHorizontalStrut(20));
		box.add(cancel);
		
		
		submit.addActionListener(this);
		cancel.addActionListener(this);
		this.add(box);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == submit) {
			JOptionPane.showMessageDialog(null, "点击了确定按钮", "确定", JOptionPane.INFORMATION_MESSAGE);
		}
		if (e.getSource() == cancel) {
			JOptionPane.showMessageDialog(null, "点击了取消按钮", "取消", JOptionPane.CANCEL_OPTION);
		}
	}
	 
}

测试代码

package dragon;

public class Test {
	public static void main(String[] args) {
		new View1();
	}
}

运行截图

在这里插入图片描述

在这里插入图片描述

说明:这种方式和上面第二种差不多,但是我个人很喜欢这种,主要是少写了几个类。这也是一种很好的方式,主要是传递参数的方式,我以前对这个 submit.addActionListener(this); 很迷惑,哈哈。

第四种:Lambda 表达式

界面代码

package dragon;

import java.awt.FlowLayout;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class View extends JFrame{
	private JButton submit, cancel;
	public View() {
		this.init();
		this.setLayout(new FlowLayout());
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBounds(300,300,250,100);
		this.setVisible(true);
	}
	
	private void init() {
		submit = new JButton("确定");
		cancel = new JButton("取消");
		Box box = Box.createHorizontalBox();
		box.add(submit);
		box.add(Box.createHorizontalStrut(20));
		box.add(cancel);
		
		submit.addActionListener((e)->{
			JOptionPane.showMessageDialog(null, "点击了确定按钮", "确定", JOptionPane.INFORMATION_MESSAGE);
		});
		
		cancel.addActionListener((e)->{
			JOptionPane.showMessageDialog(null, "点击了取消按钮", "取消", JOptionPane.CANCEL_OPTION);
		});
		this.add(box);
	}
}

测试代码

package dragon;

public class Test {
	public static void main(String[] args) {
		new View();
	}
}

运行截图

在这里插入图片描述

在这里插入图片描述

说明:Lambda 表达式 是Java 8 的新特性,主要是简化了代码,这个可以理解为对第一种匿名对象方式的简化,主要是去除了很多的模板代码,从传递对象演进到传递行为(因为其它是多余的)。这个我现在比较喜欢使用,使用这种方法,可以少些很多的代码。当然了,它也是有不足的,使用 Lambda 表达式的前提是这个接口必须是函数式接口(接口中只有一个抽象方法),一般这种接口都会使用一个注解进行修饰:@FunctionalInterface

第五种:注解

界面代码

package dragon;

import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.lang.reflect.InvocationTargetException;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;


public class View5 extends JFrame{
	@ButtonListener(listener=SubmitListener.class)
	private JButton submit;
	
	@ButtonListener(listener=CancelListener.class)
	private JButton cancel;
	
	public View5() {
		this.init();
		this.setLayout(new FlowLayout());
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBounds(300,300,250,100);
		this.setVisible(true);
	}
	
	private void init() {
		submit = new JButton("确定");
		cancel = new JButton("取消");
		Box box = Box.createHorizontalBox();
		box.add(submit);
		box.add(Box.createHorizontalStrut(20));
		box.add(cancel);
		
		//处理注解的类对象
		ButtonProcess process;
		process = new ButtonProcess();
		try {
			process.addListener(this);
		} catch (Exception e) {
			//直接处理 Exception 异常
			e.printStackTrace();
		}
		
		this.add(box);
	}
}

注解处理类

package dragon;

import java.awt.event.ActionListener;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import javax.swing.JButton;

public class ButtonProcess {
	public void addListener(Object ob) throws IllegalArgumentException, IllegalAccessException, NoSuchMethodException, SecurityException, InstantiationException, InvocationTargetException {
		Class<?> clazz = ob.getClass();
		Field[] fields = clazz.getDeclaredFields();
		for (Field field : fields) {
			//访问私有的成员变量,必须设置访问权限
			field.setAccessible(true);
			Object object = field.get(ob);
			//获取成员变量的注解
			ButtonListener buttonListener = field.getDeclaredAnnotation(ButtonListener.class);
			//如果注解对象不为空(有的成员变量没有注解,所以该对象为 null),
			//并且 该成员变量所对应的对象的类型是JButton 类型(这里只有一个注解,可以不需要这个判断,
			//但是从代码的健壮性角度来说,应该加上,如果有多个注解,必须进行判断才行)。
			if (buttonListener != null && object != null && object instanceof JButton) {
				//获取注解的成员变量(必须经过判断之后才能,获取成员变量,注解对象可能为 null)
				Class<? extends ActionListener> listener = buttonListener.listener();
				Constructor<?> con = listener.getDeclaredConstructor(new Class[] {});
				ActionListener actionListener = (ActionListener) con.newInstance(new Object[] {});
			//	ActionListener actionListener = listener.newInstance();
				//给按钮对象添加监视器
				((JButton)object).addActionListener(actionListener);
			}
		}
	}
}

测试代码

package dragon;

public class Test {
	public static void main(String[] args) {
		new View5();
	}
}

注意:ActionListener actionListener = listener.newInstance(); 这句话被我注释了,因为在 Java 9中,Class 对象的 newInstance()废弃了,不再推荐使用了,但是这个ActionListener 是一个接口,接口是没有构造方法的,但是我使用反射的方式获取到了,因为接口也是类的一种,可能是含有 私有的构造方法。

运行截图:

在这里插入图片描述

在这里插入图片描述

说明:这种实现方式,是这里最复杂的,但是不能说它是最差的(不过速度应该是最慢的了,毕竟反射的速度是没有直接创建对象快的。),上面代码参考了疯狂Java讲义,但是加了一点我的注释,但是这是一种新的方式,毕竟我们不能永远只写一些很容易就看得懂的代码,也是需要学习新的知识,这个例子主要是学习如何使用注解的,可以看出来虽然很复杂,但是这也是很有趣的一种方式。

总结

使用上面五种方式实现了给按钮添加监视器,还是很有趣的。上面总结的这些例子,还是本身为了复习Java的知识,并且和新学习的只是做一个比较,这样学习的效果会比较好,添加监视器只是实现的一种方式。这里最重要的第五种方式,因为我这两天在学习注解的使用,一开始看注解很懵逼,现在感觉有点理解了,说明只要付出努力,还是会有点效果的。一起好好努力吧。

到此这篇关于详解Java如何给按钮添加监视器的文章就介绍到这了,更多相关Java按钮添加监视器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解Java如何给按钮添加监视器

本文链接: https://www.lsjlt.com/news/204699.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Java如何给按钮添加监视器
    目录给按钮添加监视器第一种:匿名对象第二种:实现类第三种:实现接口第四种:Lambda 表达式第五种:注解总结给按钮添加监视器 最近看了 java 相关方面的内容,正好总结一下,给按...
    99+
    2023-05-14
    Java按钮 添加监视器 Java按钮添加监视器
  • Java怎么给按钮添加监视器
    这篇“Java怎么给按钮添加监视器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java怎么给按钮添加监视器”文章吧。第一种...
    99+
    2023-07-05
  • css中如何给按钮添加背景图片
    在css中给按钮设置背景图片的方法:1.创建按钮;2.设置按钮宽高;3.使用使用background属性设置背景图片;在css中给按钮设置背景图片的方法首先,在页面中创建两个按钮,并定义class类用于对比; <body&g...
    99+
    2024-04-02
  • android studio如何添加按钮
    在Android Studio中添加按钮,可以通过以下步骤进行操作:1. 打开Android Studio,创建或打开一个项目。2....
    99+
    2023-10-08
    android
  • css如何给按钮加阴影
    在css中给按钮添加阴影的方法:1.创建按钮;2.设置按钮大小;3.使用box-shadow属性设置阴影;在css中给按钮添加阴影的方法首先,在页面中创建一个按钮; <body>   &n...
    99+
    2024-04-02
  • JS如何给按钮添加跳转功能类似a标签
    这篇文章给大家分享的是有关JS如何给按钮添加跳转功能类似a标签的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法window.location.href = ...
    99+
    2024-04-02
  • Unity 按钮如何添加OnClick事件
    这篇文章主要讲解了“Unity 按钮如何添加OnClick事件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Unity 按钮如何添加OnClick事件”吧!在Hierarchy面板右键UI&...
    99+
    2023-06-14
  • iOS11应用视图中如何使用代码添加按钮
    这篇文章主要介绍了iOS11应用视图中如何使用代码添加按钮,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。由于使用编辑界面添加视图的方式比较简单,所以不在介绍。这里,直接讲解代...
    99+
    2023-06-04
  • dreamweaver cs5如何给网页添加设置为主页的按钮
    小编给大家分享一下dreamweaver cs5如何给网页添加设置为主页的按钮,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在浏览网页的时候我们随处可见设置为主页的链接或者按钮,本质上他们都是一个脚本链接,不过这种脚本链接...
    99+
    2023-06-08
  • Android如何给Textview添加菜单项详解(Java)
    目录背景描述:解决办法具体步骤:1.创建菜单文件2.给activity添加菜单,重写菜单监听事件3. 给控件添加菜单响应属性 总结背景描述: 界面上有一个Textview和...
    99+
    2024-04-02
  • wxPython中wx.gird.Gird添加按钮如何实现
    这篇文章主要介绍了wxPython中wx.gird.Gird添加按钮如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇wxPython中wx.gird.Gird添加按钮如何实现文章都会有所收获,下面我们一起...
    99+
    2023-07-05
  • WinForm中如何添加一个按钮控件
    要在WinForm中添加一个按钮控件,可以按照以下步骤操作: 打开Visual Studio并创建一个新的WinForm项目。 打...
    99+
    2024-03-12
    WinForm
  • Dreamweaver中banner两侧的按钮如何添加
    这篇文章给大家分享的是有关Dreamweaver中banner两侧的按钮如何添加的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Dreamweaver网页中的banner图片需要切换,我们可以添加按钮来切换图片。操...
    99+
    2023-06-08
  • EasyUI在Panel上如何动态添加LinkButton按钮
    这篇文章主要介绍EasyUI在Panel上如何动态添加LinkButton按钮,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!需求如下图。看似简单,往panel的title中循环添加l...
    99+
    2024-04-02
  • Dreamweaver按钮如何添加立体阴影效果
    这篇文章主要介绍Dreamweaver按钮如何添加立体阴影效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:首先用DW制作一个按钮,可以参考下方引用经验来制作。然后我们在按钮样式中添加一个投影的代码【box-...
    99+
    2023-06-08
  • 如何实现jQuery添加删除按钮Click事件
    这篇文章主要为大家展示了“如何实现jQuery添加删除按钮Click事件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现jQuery添加删除按钮Click...
    99+
    2024-04-02
  • Android标题栏上如何添加多个Menu按钮
    这篇文章主要介绍Android标题栏上如何添加多个Menu按钮,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Android标题栏上添加多个Menu按钮的实例前言:最近项目中碰到要在Android Menu旁边再添加一...
    99+
    2023-05-30
    android menu
  • layer提示框如何添加多个按钮选择
    这篇文章给大家分享的是有关layer提示框如何添加多个按钮选择的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。如下所示:function jumpChoose(argu)...
    99+
    2024-04-02
  • 如何在Android应用中添加一个按钮功能
    这期内容当中小编将会给大家带来有关如何在Android应用中添加一个按钮功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、首先创建一个按钮<Buttonandroid:id="@+id...
    99+
    2023-05-31
    android roi
  • 如何用css3制作按钮并添加动态效果
    本篇内容主要讲解“如何用css3制作按钮并添加动态效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用css3制作按钮并添加动态效果”吧! ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作