如何实现为一个按钮添加多个事件

孙兴兴 2014-04-17 07:04:02
想要为一个按钮添加两个事件,一个是连接数据库进行数据查询的,一个是实现倒计时的,这两个事件的代码都已完成,如何实现点击按钮时同时实现这两个事件呢?
...全文
1034 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxbccsu 2014-04-21
  • 打赏
  • 举报
回复
引用 7 楼 u013833220 的回复:
[quote=引用 5 楼 alan19931103 的回复:] 楼上说的都对。 添加两个监听实现两个事件的处理,但是你的应该是一个事件才对。只是调用两个方法而已 比如 mouseClicked(){ 连接数据库的方法(); 倒计时的方法 }
当点击开始倒计时的按钮时,如果上一个倒计时还没有结束,又一个倒计时又开始了,该怎么处理这种情况呢?[/quote] 给你个示例, 自己看看:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class TimerDemo {

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new TimerDemo().new TimerFrame();
			}
		});
	}

	class TimerFrame extends JFrame{
		private static final long serialVersionUID = 281511492706800685L;
		JLabel label = null;
		JButton button = null;
		List<Timer> list = new ArrayList<Timer>();
		
		public TimerFrame(){
			JFrame frame = new JFrame();
			frame.setSize(300, 200);
			label = new JLabel();
			button = new JButton("开始计时");
			button.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
				final Timer timer = new Timer();
				
				for(Timer tim : list){
					tim.cancel();
				}
				list.clear();
				
				if(list.isEmpty()){
					list.add(timer);
				}
				
				timer.schedule(new TimerTask() {
				private int count = 30;
				@Override
					public void run() {
					if(count > 0){
						SwingUtilities.invokeLater(new Runnable() {
							@Override
							public void run() {
								label.setText( "  "+String.valueOf(count--) + " 秒");
							}
						});
					}else{
						timer.cancel();
						SwingUtilities.invokeLater(new Runnable() {
							@Override
							public void run() {
								label.setText("时间到!");
							}
						});
					 }
				  }}, 0, 1000);
				}
			});
			
			frame.getContentPane().add(label, BorderLayout.NORTH);
			frame.getContentPane().add(button, BorderLayout.SOUTH);
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			frame.setVisible(true);
			
		}
	}
}

孙兴兴 2014-04-21
  • 打赏
  • 举报
回复
引用 16 楼 lxbccsu 的回复:
[quote=引用 7 楼 u013833220 的回复:] [quote=引用 5 楼 alan19931103 的回复:] 楼上说的都对。 添加两个监听实现两个事件的处理,但是你的应该是一个事件才对。只是调用两个方法而已 比如 mouseClicked(){ 连接数据库的方法(); 倒计时的方法 }
当点击开始倒计时的按钮时,如果上一个倒计时还没有结束,又一个倒计时又开始了,该怎么处理这种情况呢?[/quote] 给你个示例, 自己看看:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class TimerDemo {

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new TimerDemo().new TimerFrame();
			}
		});
	}

	class TimerFrame extends JFrame{
		private static final long serialVersionUID = 281511492706800685L;
		JLabel label = null;
		JButton button = null;
		List<Timer> list = new ArrayList<Timer>();
		
		public TimerFrame(){
			JFrame frame = new JFrame();
			frame.setSize(300, 200);
			label = new JLabel();
			button = new JButton("开始计时");
			button.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
				final Timer timer = new Timer();
				
				for(Timer tim : list){
					tim.cancel();
				}
				list.clear();
				
				if(list.isEmpty()){
					list.add(timer);
				}
				
				timer.schedule(new TimerTask() {
				private int count = 30;
				@Override
					public void run() {
					if(count > 0){
						SwingUtilities.invokeLater(new Runnable() {
							@Override
							public void run() {
								label.setText( "  "+String.valueOf(count--) + " 秒");
							}
						});
					}else{
						timer.cancel();
						SwingUtilities.invokeLater(new Runnable() {
							@Override
							public void run() {
								label.setText("时间到!");
							}
						});
					 }
				  }}, 0, 1000);
				}
			});
			
			frame.getContentPane().add(label, BorderLayout.NORTH);
			frame.getContentPane().add(button, BorderLayout.SOUTH);
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			frame.setVisible(true);
			
		}
	}
}

[/quote]
引用 16 楼 lxbccsu 的回复:
[quote=引用 7 楼 u013833220 的回复:] [quote=引用 5 楼 alan19931103 的回复:] 楼上说的都对。 添加两个监听实现两个事件的处理,但是你的应该是一个事件才对。只是调用两个方法而已 比如 mouseClicked(){ 连接数据库的方法(); 倒计时的方法 }
当点击开始倒计时的按钮时,如果上一个倒计时还没有结束,又一个倒计时又开始了,该怎么处理这种情况呢?[/quote] 给你个示例, 自己看看:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class TimerDemo {

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new TimerDemo().new TimerFrame();
			}
		});
	}

	class TimerFrame extends JFrame{
		private static final long serialVersionUID = 281511492706800685L;
		JLabel label = null;
		JButton button = null;
		List<Timer> list = new ArrayList<Timer>();
		
		public TimerFrame(){
			JFrame frame = new JFrame();
			frame.setSize(300, 200);
			label = new JLabel();
			button = new JButton("开始计时");
			button.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
				final Timer timer = new Timer();
				
				for(Timer tim : list){
					tim.cancel();
				}
				list.clear();
				
				if(list.isEmpty()){
					list.add(timer);
				}
				
				timer.schedule(new TimerTask() {
				private int count = 30;
				@Override
					public void run() {
					if(count > 0){
						SwingUtilities.invokeLater(new Runnable() {
							@Override
							public void run() {
								label.setText( "  "+String.valueOf(count--) + " 秒");
							}
						});
					}else{
						timer.cancel();
						SwingUtilities.invokeLater(new Runnable() {
							@Override
							public void run() {
								label.setText("时间到!");
							}
						});
					 }
				  }}, 0, 1000);
				}
			});
			
			frame.getContentPane().add(label, BorderLayout.NORTH);
			frame.getContentPane().add(button, BorderLayout.SOUTH);
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			frame.setVisible(true);
			
		}
	}
}

[/quote]谢谢啦,就是要这种效果
alan19931103 2014-04-19
  • 打赏
  • 举报
回复
引用 7 楼 u013833220 的回复:
当点击开始倒计时的按钮时,如果上一个倒计时还没有结束,又一个倒计时又开始了,该怎么处理这种情况呢?
你不需要两个倒计时的话就倒计时代码,保证只能有一个倒计时对象就好了
孙兴兴 2014-04-19
  • 打赏
  • 举报
回复
引用 5 楼 alan19931103 的回复:
楼上说的都对。 添加两个监听实现两个事件的处理,但是你的应该是一个事件才对。只是调用两个方法而已 比如 mouseClicked(){ 连接数据库的方法(); 倒计时的方法 }
当点击开始倒计时的按钮时,如果上一个倒计时还没有结束,又一个倒计时又开始了,该怎么处理这种情况呢?
孙兴兴 2014-04-19
  • 打赏
  • 举报
回复
引用 3 楼 u014451530 的回复:
add一个监听,监听里添加两个方法,数据库查询的没有问题,线程的就用isAlive()方法判断是否活动的。没有经过测试,不过应该可行。
当点击开始按钮时,上一个倒计时的还没结束,又一个倒计时又开始了,怎么处理这种情况呢?
tony4geek 2014-04-19
  • 打赏
  • 举报
回复
/=就是一个方法 ,嵌套2个方法?/
孙兴兴 2014-04-19
  • 打赏
  • 举报
回复
引用 13 楼 afgasdg 的回复:
两个时间写到一个方法中,触发事件时调用该方法
不是两个时间,是重复点击按钮时就会有多个倒计时一起在运行
java爱好者 2014-04-19
  • 打赏
  • 举报
回复
两个时间写到一个方法中,触发事件时调用该方法
alan19931103 2014-04-19
  • 打赏
  • 举报
回复
引用 11 楼 u013833220 的回复:
是什么啊,新手求指教啊,谢谢!
timer.cancel();
孙兴兴 2014-04-19
  • 打赏
  • 举报
回复
引用 10 楼 alan19931103 的回复:
[quote=引用 9 楼 u013833220 的回复:]当我多次点击button_1按钮时,会出现多个倒计时一起运行,怎样改进才能使当我重新点击按钮时,上一个倒计时结束呢?谢谢啦!
timer好像有个取消倒计时的方法[/quote]是什么啊,新手求指教啊,谢谢!
alan19931103 2014-04-19
  • 打赏
  • 举报
回复
引用 9 楼 u013833220 的回复:
当我多次点击button_1按钮时,会出现多个倒计时一起运行,怎样改进才能使当我重新点击按钮时,上一个倒计时结束呢?谢谢啦!
timer好像有个取消倒计时的方法
孙兴兴 2014-04-19
  • 打赏
  • 举报
回复
引用 8 楼 alan19931103 的回复:
[quote=引用 7 楼 u013833220 的回复:] 当点击开始倒计时的按钮时,如果上一个倒计时还没有结束,又一个倒计时又开始了,该怎么处理这种情况呢?
你不需要两个倒计时的话就倒计时代码,保证只能有一个倒计时对象就好了[/quote]button_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { final Timer timer = new Timer(); timer.schedule(new TimerTask() { private int count = 30; @Override public void run() { if(count > 0){ lable.setText( " "+String.valueOf(count--) + " 秒"); }else{ timer.cancel(); lable.setText("时间到!"); } }, 0, 1000); } }); 以上是写好的代码,当我多次点击button_1按钮时,会出现多个倒计时一起运行,怎样改进才能使当我重新点击按钮时,上一个倒计时结束呢?谢谢啦!
alan19931103 2014-04-18
  • 打赏
  • 举报
回复
楼上说的都对。 添加两个监听实现两个事件的处理,但是你的应该是一个事件才对。只是调用两个方法而已 比如 mouseClicked(){ 连接数据库的方法(); 倒计时的方法 }
lxbccsu 2014-04-18
  • 打赏
  • 举报
回复
引用 2 楼 u013833220 的回复:
引用 1 楼 wangxiaojingo 的回复:
add两个监听不行么?
倒计时事件是线程的怎么写在监听事件里面呢?
如果这个线程会修改Swing组件的状态,应该把那些处理放入: SwingUtilities.invokeLater(new Runnable(){ @Override public void run() { } }); 如果是很耗时的处理,应该用new Thread().start()来处理; 你既然定义了两个任务,就可以放在一个监听事件中,同时开启两个线程来运行;
请叫我贤哥 2014-04-17
  • 打赏
  • 举报
回复
add一个监听,监听里添加两个方法,数据库查询的没有问题,线程的就用isAlive()方法判断是否活动的。没有经过测试,不过应该可行。
孙兴兴 2014-04-17
  • 打赏
  • 举报
回复
引用 1 楼 wangxiaojingo 的回复:
add两个监听不行么?
倒计时事件是线程的怎么写在监听事件里面呢?
wangxiaojingo 2014-04-17
  • 打赏
  • 举报
回复
add两个监听不行么?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧