你不需要两个倒计时的话就倒计时代码,保证只能有一个倒计时对象就好了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按钮时,会出现多个倒计时一起运行,怎样改进才能使当我重新点击按钮时,上一个倒计时结束呢?谢谢啦!
timer好像有个取消倒计时的方法
timer好像有个取消倒计时的方法是什么啊,新手求指教啊,谢谢!
给你个示例, 自己看看: 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();
给你个示例, 自己看看: 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();
} } } 给你个示例, 自己看看: 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();
如果这个线程会修改Swing组件的状态,应该把那些处理放入:
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
}
});如果是很耗时的处理,应该用new Thread().start()来处理;你既然定义了两个任务,就可以放在一个监听事件中,同时开启两个线程来运行;
添加两个监听实现两个事件的处理,但是你的应该是一个事件才对。只是调用两个方法而已比如
mouseClicked(){
连接数据库的方法();
倒计时的方法
}
你不需要两个倒计时的话就倒计时代码,保证只能有一个倒计时对象就好了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按钮时,会出现多个倒计时一起运行,怎样改进才能使当我重新点击按钮时,上一个倒计时结束呢?谢谢啦!
timer好像有个取消倒计时的方法
timer好像有个取消倒计时的方法是什么啊,新手求指教啊,谢谢!
给你个示例, 自己看看:
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);
}
}
}
给你个示例, 自己看看:
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);
}
}
}
给你个示例, 自己看看:
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);
}
}
}谢谢啦,就是要这种效果